我有这个代码并注意到在指定多个线程时,性能会受到影响。这里的概念很简单,在多处理中设置一个队列,从每个线程访问它,同样 - 注意我在这里使用一个易于分割的队列大小。
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请求,它显示缩放处理器有助于加快速度,所以我在这里做错了什么;是我从所有进程访问队列并且基本上阻止了吗?