在python中有两个或多个工作队列

时间:2011-05-17 08:57:54

标签: python multithreading multiprocessing

所以我有2个主要的工作进程,一个应该获取URL的内容和另一个 将每个锚链接插入postgre表。现在我正在跑步 第一个进程的12个实例,所有这些实例都从一个URL队列中获取其URL,然后将锚点放在第二个队列中,但是如何让另一组线程尝试将Anchor推入表中?当我启动线程时,发现他们的队列为空并且他们死了,如果我禁用该功能他们不会在工作完成时死亡,我该如何管理它,顺便说一下,因为大概使用进程而不是线程密集的IO交互涉及?

1 个答案:

答案 0 :(得分:1)

你需要两个队列,URLFetchers将从一个队列中弹出URL并推入第二个队列,然后AnchorInserters应从第二个队列中弹出以处理数据。该组织应为您的问题提供良好的同步机制。

编辑:避免工人退出

你需要阻止直到一个元素可用。

while True:
   element = queue.get(block=True, timeout=None)
   #do worker's task

来自python的queue.get doc ...

  

如果可选的args块为真,并且   timeout是None(默认值),block   如果有必要,直到一个项目   可用。