1. <small id='cu9AN'></small><noframes id='cu9AN'>

          <bdo id='cu9AN'></bdo><ul id='cu9AN'></ul>
      2. <tfoot id='cu9AN'></tfoot>
        <i id='cu9AN'><tr id='cu9AN'><dt id='cu9AN'><q id='cu9AN'><span id='cu9AN'><b id='cu9AN'><form id='cu9AN'><ins id='cu9AN'></ins><ul id='cu9AN'></ul><sub id='cu9AN'></sub></form><legend id='cu9AN'></legend><bdo id='cu9AN'><pre id='cu9AN'><center id='cu9AN'></center></pre></bdo></b><th id='cu9AN'></th></span></q></dt></tr></i><div id='cu9AN'><tfoot id='cu9AN'></tfoot><dl id='cu9AN'><fieldset id='cu9AN'></fieldset></dl></div>
      3. <legend id='cu9AN'><style id='cu9AN'><dir id='cu9AN'><q id='cu9AN'></q></dir></style></legend>

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

        why doesn#39;t a simple python producer/consumer multi-threading program speed up by adding the number of workers?(为什么一个简单的 python 生产者/消费者多线程程序不能通过增加工人的数量来加速?)
      4. <legend id='6ehmG'><style id='6ehmG'><dir id='6ehmG'><q id='6ehmG'></q></dir></style></legend>

        <small id='6ehmG'></small><noframes id='6ehmG'>

                  <tbody id='6ehmG'></tbody>
                  <bdo id='6ehmG'></bdo><ul id='6ehmG'></ul>

                  <tfoot id='6ehmG'></tfoot>
                  <i id='6ehmG'><tr id='6ehmG'><dt id='6ehmG'><q id='6ehmG'><span id='6ehmG'><b id='6ehmG'><form id='6ehmG'><ins id='6ehmG'></ins><ul id='6ehmG'></ul><sub id='6ehmG'></sub></form><legend id='6ehmG'></legend><bdo id='6ehmG'><pre id='6ehmG'><center id='6ehmG'></center></pre></bdo></b><th id='6ehmG'></th></span></q></dt></tr></i><div id='6ehmG'><tfoot id='6ehmG'></tfoot><dl id='6ehmG'><fieldset id='6ehmG'></fieldset></dl></div>
                  本文介绍了为什么一个简单的 python 生产者/消费者多线程程序不能通过增加工人的数量来加速?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  下面的代码与 http://docs 上的 python 官方队列示例几乎相同.python.org/2/library/queue.html

                  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 核处理器上的结果:

                  These are the results on a Xeon 12-core processor:

                  $ ./speed.py 1
                  12.0873839855
                  
                  $ ./speed.py 2
                  15.9101941586
                  
                  $ ./speed.py 4
                  27.5713479519
                  

                  我预计增加工作人员的数量会减少响应时间,但实际上它正在增加.我做了一次又一次的实验,但结果没有改变.

                  I expected that increasing the number of workers reduce the response time but instead, it is increasing. I did the experiment again and again but the result didn't change.

                  我是否遗漏了一些明显的东西?还是 python 队列/线程不能正常工作?

                  Am I missing something obvious? or the python queue/threading doesn't work well?

                  推荐答案

                  Python 在多线程方面表现相当差.由于全局锁,一次只有一个线程通常会取得进展.请参阅 http://wiki.python.org/moin/GlobalInterpreterLock

                  Python is rather poor at multi-threading. Due to a global lock only one thread normally makes progress at a time. See http://wiki.python.org/moin/GlobalInterpreterLock

                  这篇关于为什么一个简单的 python 生产者/消费者多线程程序不能通过增加工人的数量来加速?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  Adding config modes to Plotly.Py offline - modebar(将配置模式添加到 Plotly.Py 离线 - 模式栏)
                  Plotly: How to style a plotly figure so that it doesn#39;t display gaps for missing dates?(Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙?)
                  python save plotly plot to local file and insert into html(python将绘图保存到本地文件并插入到html中)
                  Plotly: What color cycle does plotly express follow?(情节:情节表达遵循什么颜色循环?)
                  How to save plotly express plot into a html or static image file?(如何将情节表达图保存到 html 或静态图像文件中?)
                  Plotly: How to make a line plot from a pandas dataframe with a long or wide format?(Plotly:如何使用长格式或宽格式的 pandas 数据框制作线图?)
                  • <bdo id='yfmay'></bdo><ul id='yfmay'></ul>
                    <i id='yfmay'><tr id='yfmay'><dt id='yfmay'><q id='yfmay'><span id='yfmay'><b id='yfmay'><form id='yfmay'><ins id='yfmay'></ins><ul id='yfmay'></ul><sub id='yfmay'></sub></form><legend id='yfmay'></legend><bdo id='yfmay'><pre id='yfmay'><center id='yfmay'></center></pre></bdo></b><th id='yfmay'></th></span></q></dt></tr></i><div id='yfmay'><tfoot id='yfmay'></tfoot><dl id='yfmay'><fieldset id='yfmay'></fieldset></dl></div>
                      <tbody id='yfmay'></tbody>

                    <legend id='yfmay'><style id='yfmay'><dir id='yfmay'><q id='yfmay'></q></dir></style></legend>
                      • <tfoot id='yfmay'></tfoot>

                            <small id='yfmay'></small><noframes id='yfmay'>