为什么一个简单的python生产者/消费者多线程程序不会通过添加工
发布时间:2020-12-20 13:04:42 所属栏目:Python 来源:网络整理
导读:下面的代码几乎与 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(
下面的代码几乎与
http://docs.python.org/2/library/queue.html的python官方Queue示例相同
from Queue import Queue from threading import Thread from time import time import sys num_worker_threads = int(sys.argv[1]) source = xrange(10000) def do_work(item): for i in xrange(100000): pass def 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 1 12.0873839855 $./speed.py 2 15.9101941586 $./speed.py 4 27.5713479519 我预计增加工人数会减少响应时间,但相反,它会增加.我一次又一次地做了实验,但结果并没有改变. 我错过了一些明显的东西吗或python队列/线程不能很好地工作? 解决方法
Python在多线程方面相当差.由于全局锁定,一次只有一个线程正在进行.见
http://wiki.python.org/moin/GlobalInterpreterLock
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |