Python 中的线程/队列

发布于 2024-11-29 18:49:42 字数 666 浏览 1 评论 0原文

我打算在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

孤独难免 2024-12-06 18:49:42

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

所以在Python中> 2.6、使用:

t.setDaemon(True)

Python中的And< 2.6、使用:

t.daemon = True

I think it is the t.setDaemon(True) part.

So in Python > 2.6, use:

t.setDaemon(True)

And in Python < 2.6, use:

t.daemon = True
瑾兮 2024-12-06 18:49:42

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.

朦胧时间 2024-12-06 18:49:42

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

不要使用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!

迟到的我 2024-12-06 18:49:42

使用 Daemon=True。这将确保您的线程在执行 main 函数后退出。

Use Daemon=True. That will ensure that your thread exits once the main function is executed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文