【发布时间】:2019-06-06 21:37:43
【问题描述】:
我正在使用curio 来实现使用curio.Event 对象进行通信的两个任务的机制。第一个任务(称为action())首先运行,awaits 是要设置的事件。第二个任务(称为setter())在第一个任务之后运行,并且正在设置事件。
代码如下:
import curio
evt = curio.Event()
async def action():
await evt.wait()
print('Performing action')
async def setter():
await evt.set()
print('Event set')
async def run():
task = await curio.spawn(action())
await setter()
print('Finished run')
await task.wait()
curio.run(run())
输出如下:
Event set
Finished run
Performing action
这意味着print('Performing action') 是在print('Finished run') 之后执行的,这就是我试图阻止的——我原以为调用await evt.set() 也会调用它的所有服务员,而run() 不会继续直到所有的服务员都被调用,这意味着action() 将在print('Finished run') 被执行之前继续。这是我想要的输出:
Event set
Performing action
Finished run
我做错了什么?有没有办法改变这种行为?我希望对执行顺序有更多的控制权。
谢谢
【问题讨论】:
标签: python python-asyncio curio