在asyncio模块中,如何使用我们想继续的变量突破事件循环

时间:2019-12-04 05:40:01

标签: python python-asyncio

我是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"

有什么方法可以做这样的工作吗?一个简短的例子非常感激。

1 个答案:

答案 0 :(得分:0)

请尝试使用loop.stop()而不是调用loop.close()

以下内容将停止循环。

  

loop.stop()

     

停止事件循环。

关闭也会丢弃所有待处理的任务。

  

loop.close()

     

关闭事件循环。

     

调用此函数时,循环不得运行。任何未决   回调将被丢弃。

     

此方法清除所有队列并关闭执行程序,但是   不要等待执行者完成。

     

此方法是幂等且不可逆的。没有其他方法可以   在事件循环关闭后调用。

或者您可以返回而不是调用上述函数,并等待function_B也返回。 然后,关闭循环。