我是python中使用Asyncio模块的新手。假设有两个我想异步运行的函数。 function_A()基本上是运行循环,需要在特定条件下使用“ if”语句停止。
我不确定eventloop的工作原理,只是知道当我运行 loop.stop()时,它会杀死内核并重新启动它,从而使“ lst” 中断事件循环后我要保留的内容将在内核被杀死后自动删除。
这就是我想要做的:
global lst
lst = []
import asyncio
async def function_A():
for i in range(0,100):
lst.append(i)
if len(lst) == 10:
loop.stop() # <== this doesn't work well
async def function_B():
# do something else
loop = asyncio.get_event_loop()
tasks = asyncio.gather(function_A(), function_B())
loop.run_until_complete(tasks)
## break out of the event loop ##
# lst is saved and continue to another process with "lst"
有什么方法可以做这样的工作吗?一个简短的例子非常感激。
答案 0 :(得分:0)
请尝试使用loop.stop()
而不是调用loop.close()
。
以下内容将停止循环。
停止事件循环。
关闭也会丢弃所有待处理的任务。
关闭事件循环。
调用此函数时,循环不得运行。任何未决 回调将被丢弃。
此方法清除所有队列并关闭执行程序,但是 不要等待执行者完成。
此方法是幂等且不可逆的。没有其他方法可以 在事件循环关闭后调用。
或者您可以返回而不是调用上述函数,并等待function_B
也返回。
然后,关闭循环。