1 次のコードをファイルにコピーし、forkcore.py
という名前を付けます。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 "現在のプロセスの PID は "+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 "メインプロセス開始、pid は "+str(pid)
for _ in range(0,child_process_num):
if pid==os.getpid():
if os.fork():
self.ds_thread()
#init function
def __init__(self,worker,port=3333):
s=ソケット.ソケット(ソケット.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 独自のコードを作成します
2> ワーカー関数を定義します。ワーカー関数には 2 つのパラメータが必要です。conn はクライアントが接続するソケットを表し、addr は (ip, port) のタプルです。
3> forkcore.ds_forecore(worker,port=5555) を直接使用するだけです。 port はリスニングポートを指定するために使用されます。
コードをコピー
forkcore.ds_forkcore(worker,port=5555)
注: Linux 2.6 以降のカーネルが必要です