我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
我怎么了?有没有办法改变这种行为?我想对执行顺序有更多的控制权。
谢谢