我认为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
在其他复杂代码运行时,允许运行复杂代码的最佳方法是什么,以便在完成后我可以杀死其他代码?
答案 0 :(得分:0)
你提到过"计算"在主题中,我会假设您的#34;一个复杂的代码和#34;是CPU密集型的。正如其名称一样,asyncio更多地使用I / O绑定操作,因此对您的情况没有帮助。
如果您想要从外部杀死进程,我建议您使用multiprocessing或subprocess。如果您有I / O或复杂的时间安排,可以使用asyncio subprocess。
对于优雅的内部关闭,通常最好从外部编程设置退出标志并触发工作人员内部的清理过程:
def worker(self):
while self.running:
# next step of work
# clean up here
但是你有责任让每一步的工作都相对较小,以便退出信号足够快地做出响应。