Python中的线程/队列

时间:2011-08-16 07:42:57

标签: python multithreading queue

我打算在python 2.5.2中使用线程/队列 但似乎python在queue.join() - 命令中变得冻结。 以下代码的输出仅为:BEFORE

import Queue
import threading

queue = Queue.Queue()

class ThreadUrl(threading.Thread):

    def __init__(self, queue):
        threading.Thread.__init__(self)
        self.queue = queue

    def run(self):
        while True:

            i = self.queue.get()
            print i
            self.queue.task_done()


def main():

    for i in range(5):
        t = ThreadUrl(queue)
        t.setDaemon(True)
        t.start()

    for i in range(5):
        queue.put(i)

    print "BEFORE"
    queue.join()
    print "AFTER"


main()

有人知道出了什么问题吗?

4 个答案:

答案 0 :(得分:1)

我认为这是t.setDaemon(True)部分。

所以> 2.6

t.setDaemon(真)

< 2.6

t.daemon = True

答案 1 :(得分:0)

ThreadUrl类上的run()方法缩进太多了。结果永远不会启动该线程。如果你将run方法的缩进与 init ()放在相同的缩进级别,那么它将正常工作。

答案 2 :(得分:0)

我现在找到的解决方案是:

不要使用Python 2.5.2! 如果使用Python 2.7.2而不是上面的代码可以很好地工作。

谢谢大家!

答案 3 :(得分:0)

使用守护进程=真。这将确保在执行main函数后退出线程。