1 拷贝下面的代码到一个文件,并命名为forkcore.py
代码如下:
import osimport threadingimport selectimport 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): pmain process start, pid is “+str(pid) for _ in range(0,child_process_num): if pworker 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以上的内核