python高并发异步服务器核心库forkcore使用方法

时间:2021-12-04 18:38:24 

1 拷贝下面的代码到一个文件,并命名为forkcore.py


import os
import threading
import select
import socket

class ds_forkcore(object):

    #async IO(epoll)
    def ds_epoll(self):
        epoll=select.epoll()
        epoll.register(self.s.fileno(),select.EPOLLIN|select.EPOLLET)
        while 1:
            epoll_list=epoll.poll()
            for fd,_events in epoll_list:
                if fd==self.s.fileno():
                    conn,addr=self.s.accept()
                    print "Current process's pid is "+str(os.getpid())
                    self.worker(conn,addr)

    #multi_thread
    def ds_thread(self,thread_num=100):
        for _ in range(0,thread_num):
            t=threading.Thread(target=self.ds_epoll)
            t.setDaemon(1)
            t.start()
            t.join()

    #multi_process
    def ds_process(self,child_process_num=8):
        pid=os.getpid()
        print "Main process start, pid is "+str(pid)
        for _ in range(0,child_process_num):
            if pid==os.getpid():
                if os.fork():
                    pass
                else:
                    print "Worker process start, pid is "+str(os.getpid())
                    self.ds_thread()

    #init function
    def __init__(self,worker,port=3333):
        s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
        s.bind(("",port))
        s.listen(50000)
        self.s=s
        self.worker=worker
        self.ds_process()

2 编写自己的代码

1> 导入forkcore库。

2> 定义worker函数,worker函数需要两个参数,conn代表客户端连接的socket,addr是(ip,port)的元组。

3> 直接使用forkcore.ds_forecore(worker,port=5555)即可,port用于指定监听端口。


import forkcore

if __name__=="__main__":
    def worker(conn,addr):
        print "Message from ("+str(addr[0])+":"+str(addr[1])+"): "+conn.recv(1024)[0:-1]

    forkcore.ds_forkcore(worker,port=5555)

注:需要linux 2.6以上的内核

标签:python,高并发,异步服务器,forkcore
0
投稿

猜你喜欢

  • mysql中普通索引和唯一索引的效率对比

    2010-12-08 16:03:00
  • 详解python编译器和解释器的区别

    2023-06-26 03:53:09
  • 微信公众平台开发教程⑤ 微信扫码支付模式介绍

    2023-11-14 10:40:10
  • 如何Shrink Undo表空间,释放过度占用的空间

    2010-07-16 13:17:00
  • Web开发者的百科全书——Google DocType

    2008-07-03 13:06:00
  • 微信小程序开发工具介绍

    2023-08-10 23:05:40
  • PHP中类静态调用和范围解析操作符的区别解析

    2023-11-15 07:38:39
  • ASP 千万级数据分页的存储过程

    2011-04-14 11:08:00
  • SQL SERVER EXPRESS 常见问题及解决办法

    2008-09-13 19:07:00
  • SQL Serve数据库到DB2连接服务器的实现过程全解

    2010-08-31 15:06:00
  • Python正则表达式介绍

    2023-05-29 01:32:58
  • 通过python实现弹窗广告拦截过程详解

    2022-04-12 09:21:31
  • Django修改app名称和数据表迁移方案实现

    2022-12-14 17:09:11
  • Python实现模拟登录及表单提交的方法

    2021-05-28 19:23:12
  • Laravel操作redis和缓存操作详解

    2023-05-25 02:19:29
  • Python Web框架Flask中使用新浪SAE云存储实例

    2022-11-03 06:27:16
  • pjblog3相关日志功能(支持生成静态模式)

    2008-11-20 13:41:00
  • 如何编制一个产生随机密码的函数?

    2009-11-08 19:06:00
  • python GUI库图形界面开发之PyQt5拖放控件实例详解

    2023-04-26 08:43:24
  • php逐行读取txt文件写入数组的方法 <font color=red>原创</font>

    2023-11-14 17:22:07
  • asp之家 网络编程 m.aspxhome.com