我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')AFTER 执行print('Finished run'),这就是我试图阻止的 - 我期望调用await evt.set()也会调用它的所有服务员,并且在调用所有服务员run()之前不会继续,这意味着action()将继续 BEFOREprint('Finished run')是执行。这是我想要的输出:
Event set
Performing action
Finished run
我怎么了?有没有办法改变这种行为?我想对执行顺序有更多的控制权。
谢谢