我假设asyncio.sleep(0)是一个(标准?)协程让其他协程运行的方式。但似乎我的协程不能有任何子例程结构(并放弃对顶层以下的控制)。
$ cat test.py
import asyncio
async def cor():
def f():
await asyncio.sleep(0)
pass
$ python test.py
File "test.py", line 5
await asyncio.sleep(0)
^
SyntaxError: 'await' outside async function让一小段复杂的代码在其他复杂代码运行时运行的最好方法是什么,这样当一个代码运行完成时,我就可以杀死其他代码?
发布于 2018-05-08 10:59:51
你在主题中提到了“计算”,我假设你的“复杂的代码”是CPU密集型的。顾名思义,asyncio更多的是I/O绑定操作,因此对您的情况没有帮助。
如果你想在外部杀死一个进程,我建议使用multiprocessing或subprocess。如果您有I/O或复杂的计时计划,则可以使用asyncio subprocess。
对于正常的内部关闭,从外部以编程方式设置一个退出标志并触发工作进程内部的清理进程通常是一种好的做法:
def worker(self):
while self.running:
# next step of work
# clean up here但是,您有责任保持每个工作步骤相对较小,以便退出信号做出足够快的响应。
https://stackoverflow.com/questions/50145700
复制相似问题