python-3.x - 正确响应来自另一个上下文的等待条件
问题描述
如果正在使用 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 项。
关于如何在没有锁的情况下有效地做到这一点的任何想法?
解决方案
这可以使用asyncio.Event
. 创建一个事件并将其传递给应该通知的函数和应该等待的函数。
等待的一方应该await event.wait()
。通知方应致电event.set()
。这假设双方都使用 asyncio 而不是线程。如果通知程序在不同的线程中执行,它应该调用loop.call_soon_threadsafe(event.set)
。
推荐阅读
- angular - 如何修复“导航器”类型上不存在属性“权限”?
- python - Pandas 几乎读取 .txt 中的每一列作为索引 - 已解决
- python - 在 QNAP 上安装 pip
- react-router - 样式化 React 路由器链接
- python - Python Pandas DataFrame -Streamlit 的 SharePoint Excel URL
- python - 在熊猫数据框中为类别分配数字
- c++ - 有没有办法强制模板参数在一定范围内?
- python - bot 加入服务器时更改状态 | 不和谐.py
- swift - 使用 Codable 将字符串编码/解码为整数,并在两者之间使用函数
- javascript - 如何删除
- 列出项目并使其余项目更改其位置和ID?