正确响应来自其他上下文的等待条件

时间:2019-07-07 09:38:06

标签: python-3.x python-asyncio pyzmq uvloop

如果使用的是uvloop或asyncio,我要探索的功能之一就是是否先执行某些操作,然后“有条件地等待”。

让我们看下面的示例:

do_something()
zmq.send(stuff,coroutine_context)
rr = await (condition)
return rr

然后其他一些过程完成一些工作。

然后该程序的协程具有:

rval = zmq.recv()
look at rval and get coroutine_context.
notify (condition) pass in rval.

现在我知道我可以使用条件变量之类的东西,但是它们需要某种类型的锁。我不关心多个人访问该协程,因此我不想“锁定”任何东西。我只是想用其他协程(zmq协程)中的一些数据通知()该上下文,以返回到某个元素。

这里的关键是提取协程上下文(一些ID),然后通知await命令并传递此rval项。

关于如何有效地做到这一点的任何想法?

1 个答案:

答案 0 :(得分:0)

可以使用asyncio.Event来实现。创建一个事件,并将其传递给应通知的功能和应等待的功能。

等待方应await event.wait()。通知方应呼叫event.set()。这假定双方都使用异步而不是线程。如果通知程序在另一个线程中执行,则应改为调用loop.call_soon_threadsafe(event.set)