如何控制多个计算

时间:2018-05-03 01:30:42

标签: python

我认为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

在其他复杂代码运行时,允许运行复杂代码的最佳方法是什么,以便在完成后我可以杀死其他代码?

1 个答案:

答案 0 :(得分:0)

你提到过"计算"在主题中,我会假设您的#34;一个复杂的代码和#34;是CPU密集型的。正如其名称一样,asyncio更多地使用I / O绑定操作,因此对您的情况没有帮助。

如果您想要从外部杀死进程,我建议您使用multiprocessingsubprocess。如果您有I / O或复杂的时间安排,可以使用asyncio subprocess

对于优雅的内部关闭,通常最好从外部编程设置退出标志并触发工作人员内部的清理过程:

def worker(self):
    while self.running:
        # next step of work
    # clean up here

但是你有责任让每一步的工作都相对较小,以便退出信号足够快地做出响应。