ホームページ  >  記事  >  バックエンド開発  >  Pythonの高同時実行非同期サーバーコアライブラリforkcoreの使用方法

Pythonの高同時実行非同期サーバーコアライブラリforkcoreの使用方法

WBOY
WBOYオリジナル
2016-06-16 08:46:111094ブラウズ

1 次のコードをファイルにコピーし、forkcore.py

という名前を付けます。

コードをコピー コードは次のとおりです:

import os
import threading
import select
インポートソケット

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 独自のコードを作成します

1> forkcore ライブラリをインポートします。

2> ワーカー関数を定義します。ワーカー関数には 2 つのパラメータが必要です。conn はクライアントが接続するソケットを表し、addr は (ip, port) のタプルです。

3> forkcore.ds_forecore(worker,port=5555) を直接使用するだけです。 port はリスニングポートを指定するために使用されます。

コードをコピー

コードは次のとおりです:import forkcore
if __name__=="__main__":
def work(conn,addr): print "("+str(addr[0])+"からのメッセージ:"+str(addr[1] )+"): "+conn.recv(1024)[0:-1]


forkcore.ds_forkcore(worker,port=5555)



注: Linux 2.6 以降のカーネルが必要です

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。