Python 中的线程/队列
我打算在 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()
有人知道出了什么问题吗?
I intend using threads/queues with python 2.5.2
But it seems that python becomes freezed at the queue.join()-command.
The output of the followong code is only: 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()
Has someone an idea about what is going wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我认为这是 t.setDaemon(True) 部分。
所以在Python中> 2.6、使用:
Python中的And< 2.6、使用:
I think it is the
t.setDaemon(True)
part.So in Python > 2.6, use:
And in Python < 2.6, use:
ThreadUrl 类上的 run() 方法缩进得太远。结果线程永远不会启动。如果将 run 方法的缩进放在与 init() 相同的缩进级别上,它将正常工作。
You run() method on your ThreadUrl class is indented too far. The thread is never started as a result. If you put the indention of the run method at the same indentation level as init() it'll work fine.
我现在找到的解决方案是:
不要使用Python 2.5.2!
如果使用 Python 2.7.2,上面的代码就可以很好地工作。
谢谢大家!
The solution I now found is:
Don't use Python 2.5.2!
If one uses Python 2.7.2 instead the code above works very well.
Thank you all!
使用 Daemon=True。这将确保您的线程在执行 main 函数后退出。
Use Daemon=True. That will ensure that your thread exits once the main function is executed.