【发布时间】:2019-02-19 22:06:43
【问题描述】:
我在消费者/生产者关系中有两个任务,由asyncio.Queue 分隔。如果生产者任务失败,我希望消费者任务也尽快失败,而不是无限期地等待队列。消费者任务可以独立于生产者任务创建(派生)。
一般来说,我想实现两个任务之间的依赖关系,这样一个失败也是另一个失败,同时保持这两个任务并发(即一个不会直接等待另一个)。
这里可以使用什么样的解决方案(例如模式)?
基本上,我在想erlang's "links"。
我认为可以使用回调实现类似的东西,即asyncio.Task.add_done_callback
谢谢!
【问题讨论】:
-
依赖的范围是什么?您对任务级别感兴趣吗?如果生产者发生故障,是否应该将其传播给消费者?进程级别?如果生产者发生故障,都应该停止吗?是否有您想要避免的特定行为?
-
我想我已经回答了其中一些问题。是的,生产者任务的失败应该传播给消费者。我试图避免的行为是消费者忘记了生产者的死亡并无限期地在队列中等待。我希望消费者收到生产者死亡的通知,并有机会做出反应。或者只是失败,即使它也在队列中等待。
标签: python concurrency task python-asyncio