我打算在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()
有人知道出了什么问题吗?
答案 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函数后退出线程。