首页 > 解决方案 > 在 Python 中使用 asyncio 时如何避免运行时错误?

问题描述

我正在使用 Python 的异步功能。学会使用后。

我更新了我的代码以进行数据分析。它在 python3.5 中运行良好。但是,当我从 Python3.5 更新到 Python3.6 时,出现了运行时错误。

我的用法很简单。

首先,在名为 'runner.py' 的文件中创建一个异步用法,如下所示:

import asyncio as aio
def async_usage():
    loop = aio.get_event_loop()
    task = loop.create_task(some_task())
    loop.run_until_comeplete(task)

然后,从另一个名为“main.py”的文件中导入它

import async_usage from runner
async_usage()

当我运行 main.py 时,会发生运行时错误。

该错误表明此事件循环已在运行。

顺便说一下,这些代码和运行都是在jupyter notebook中完成的

我怎样才能避免这样的事情?

我尝试loop.stop();loop.close()在运行它之前添加代码,但是它无法正常工作。

我知道只有一个循环可以同时退出,但是,我没有在 runner.py 中运行循环。

我该如何解决这个问题?

谢谢。

标签: pythonpython-3.xpython-asyncio

解决方案


与我的代码无关,与笔记本有关。如果你使用的是 notebook,运行下面的代码,你会发现当前循环正在运行。

import asyncio as aio
default_loop = aio.get_event_loop()
if default_loop.is_running():
    print("The current loop is running!")

为了进一步证明,如果您随后运行以下代码,您的笔记本将关闭

default_loop.stop()

然后笔记本外壳会自动重新启动,内存中当前笔记本中的内容消失了。

如果您在 python shell 中执行此操作,则不会发生任何事情。

因此,只需不要使用run_until_complete,任务将自动运行在当前循环中。


推荐阅读