了解Python中的线程和队列组合

时间:2014-11-10 11:53:58

标签: python python-2.7 queue python-multithreading

我开始研究Python中的创建线程。我首先做了一些理论搜索,以了解Threads如何在Python中工作。我还继续阅读有关在Python中使用Queue以及它如何帮助解决琐碎的线程问题的内容。我能够理解每个的单独代码。然后我遇到了以下教程:

http://www.ibm.com/developerworks/aix/library/au-threadingpython/

它显示了Python中Thread和Queue的相关性,以及它在某些情况下如何加速执行过程。

我很难理解代码的某些方面

def main():

        #spawn a pool of threads, and pass them queue instance 
        for i in range(5):
          t = ThreadUrl(queue)
          t.setDaemon(True)
          t.start()

       #populate queue with data   
          for host in hosts:
            queue.put(host)

       #wait on the queue until everything has been processed     
       queue.join()

      main()
      print "Elapsed Time: %s" % (time.time() - start)

在第一个for循环中,创建了多个线程,并将一个队列实例传递给它。但据我了解,截至目前,队列已空。

在下一个for循环中

for host in hosts

主机值被推入队列。现在,如何将此队列数据分配给线程?

最后,queue.join()与此计划的相关用途是什么?

1 个答案:

答案 0 :(得分:1)

"在第一个for循环中,创建了多个线程,并将一个队列实例传递给它。但据我所知,目前队列是空的。"

是的,线程已经启动,但他们还没有工作要做。

for host in hosts:

"主机值被推入队列。现在,如何将此队列数据分配给线程?"

由队列实例

" queue.join()与此计划的相关用途是什么?"

join会导致程序等待,直到线程完成所有处理并且队列实例收集它们的输出。此程序将在此时阻止,直到队列完成。