根据我之前提出的问题:
check a list constantly and do something if list has items
我实施了这个解决方案:
workq = gevent.queue.Queue()
def workqueue():
while True:
item = workq.get()
if gevent.spawn(startWork,item).value != "Ok":
workq.put(item)
这背后的想法是,所有队列项在发生时都会生成一个worker greenlet,以便startwork(需要1-10分钟)同时对队列中的所有项运行。问题是返回值会立即被检查,并且总是为none。当我在值检查之前放置一个连接时,我可以防止这种情况发生,但是由于我总是要等待结果,所以我只能同时处理队列中的一个项目。 所以我的问题是,有没有一种方法,当它们发生的时候,当它们单独完成时,检查结果,如果不好,就把它们放回队列中继续。在
你要找的是加入一整批工人的方法。您可以使用一个^{} 或
Pool
的worker来完成此操作。在但是你希望在值发生时就把它们取回来,而不是一次就完成了。为此,你想要一个像未来一样的东西。据我所知,与线程和进程不同,greenlets还没有得到完整的future/executor抽象。绿色信贷本身有点像期货,但没有什么比
wait(iterable_of_futures, FIRST_COMPLETED)
更能召唤它们了。在或者,您可以添加一个“输出队列”,使每个任务将其结果推送到输出队列,然后从输出队列中提取所有值,直到完成为止。但是你如何同时排队等候呢?最明显的方法是用两个绿面包。在
或者,最简单的方法是,将任务包装起来,以便在结尾处重新附加项目:
相关问题 更多 >
编程相关推荐