在多处理中,为什么在访问此队列时1个进程比多个进程快?

时间:2013-01-03 18:47:59

标签: python python-3.x queue multiprocessing

我有这个代码并注意到在指定多个线程时,性能会受到影响。这里的概念很简单,在多处理中设置一个队列,从每个线程访问它,同样 - 注意我在这里使用一个易于分割的队列大小。

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请求,它显示缩放处理器有助于加快速度,所以我在这里做错了什么;是我从所有进程访问队列并且基本上阻止了吗?

0 个答案:

没有答案