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