Python生产者/消费者无限期地阻止

时间:2012-03-20 17:59:29

标签: python multithreading producer-consumer

我似乎无法弄清楚为什么我的基于队列的生产者/消费者进程无限期地阻塞和执行:

    def producer(q,urls):
        for url in urls:
            thread = ThreadChild(Profile.collection,Profile.collection,url,True)
            thread.follow_links = follow
            thread.start()
            q.put(thread,True)
        log.info('Done making threads')

    def consumer(q,total_urls):
        thread = q.get(True)
        thread.join(timeout=40.0)
        q.task_done()

    q = Queue(2)
    prod_thread = threading.Thread(target=producer, args=(q, urls))
    cons_thread = threading.Thread(target=consumer, args=(q, len(urls)))
    prod_thread.start()
    cons_thread.start()
    prod_thread.join(timeout=60.0)
    cons_thread.join(timeout=60.0)

我已经尝试在生产者和消费者线程上设置超时,以及生成器生成的子进程,并且该进程仍然无限期地运行。

ThreadChild是一个执行一些简单网络作业的过程,直到它用完要处理的URL。线程不应该花很长时间才能执行。 var urls只是要处理的线程的URL列表。值得注意的是,“完成制作线程”的日志从不打印(log是绑定到StreamHandler的std python记录器。)

生成器和消费者线程定义的超时不应该在60秒后终止所有内容,无论队列中剩下什么?我是否误解了这些方法的使用并将结果添加到队列的错误方式?

0 个答案:

没有答案