为什么一个简单的python生产者消费者多线程程序不会通过添加工作者数量来加速?

为什么一个简单的python生产者消费者多线程程序不会通过添加工作者数量来加速?,第1张

概述下面的代码几乎与 http://docs.python.org/2/library/queue.html的python官方Queue示例相同 from Queue import Queuefrom threading import Threadfrom time import timeimport sysnum_worker_threads = int(sys.argv[1])sour 下面的代码几乎与 http://docs.python.org/2/library/queue.html的python官方Queue示例相同

from Queue import Queuefrom threading import Threadfrom time import timeimport sysnum_worker_threads = int(sys.argv[1])source = xrange(10000)def do_work(item):    for i in xrange(100000):        passdef worker():    while True:        item = q.get()        do_work(item)        q.task_done()q = Queue()for item in source:    q.put(item)start = time()for i in range(num_worker_threads):    t = Thread(target=worker)    t.daemon = True    t.start()q.join()end = time()print(end - start)

这些是Xeon 12核处理器的结果:

$./speed.py 112.0873839855$./speed.py 215.9101941586$./speed.py 427.5713479519

我预计增加工人数会减少响应时间,但相反,它会增加.我一次又一次地做了实验,但结果并没有改变.

我错过了一些明显的东西吗或python队列/线程不能很好地工作?

解决方法 Python在多线程方面相当差.由于全局锁定,一次只有一个线程正在进行.见 http://wiki.python.org/moin/GlobalInterpreterLock 总结

以上是内存溢出为你收集整理的为什么一个简单的python生产者/消费者多线程程序不会通过添加工作者数量来加速?全部内容,希望文章能够帮你解决为什么一个简单的python生产者/消费者多线程程序不会通过添加工作者数量来加速?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1195900.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存