私はこのコードを持っていますが、複数のスレッドを指定するとパフォーマンスが低下することに気付きました。ここでの概念は単純です。マルチプロセッシングでキューをセットアップし、各スレッドから均等にアクセスします。ここでは、簡単に割り切れるキュー サイズを使用していることに注意してください。
import time
from multiprocessing import Process, Queue
def worker(q,x):
for i in range(x):
message = q.get()
if __name__ == "__main__":
workers=[]
threads=1
x = int(1000000/threads) #break up the work for each thread
q = Queue()
for i in range(threads):
p=Process(target=worker, args=(q,x))
workers.append(p)
print('creating queue')
for num in range(1000000):
q.put("MESSAGE")
start_time = time.time()
print('starting jobs')
for p in workers:
p.start()
print('waiting until jobs finish')
for p in workers:
p.join()
end_time = time.time()
duration = end_time - start_time
msg_per_sec = 1000000 / duration
print ("Duration: %s" % duration)
print ("Messages Per Second: %s" % msg_per_sec)
urllib リクエストを実行するマルチプロセッシング スレッドを使用して別のスクリプトを作成しましたが、プロセッサのスケーリングが高速化に役立つことが示されています。すべてのプロセスからキューにアクセスしていて、本質的にブロックしているということですか?