python - 在 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 中运行循环。
我该如何解决这个问题?
谢谢。
解决方案
与我的代码无关,与笔记本有关。如果你使用的是 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
,任务将自动运行在当前循环中。
推荐阅读
- angular5 - 在角度 5 中返回三元运算符内的模板插值
- javascript - 到空间没有在 javascript 中被转换
- javascript - Javascript:关于 elem.closest() 的逻辑
- javascript - 如何用空字符替换数字
- r - R 周期性缺失的绘图点
- c# - 如何从 wpf C# 中的 ColorCanvas 下拉控件中删除箭头
- angular - date.isValid 不是函数
- docker - docker ubuntu 容器执行 bash 问题
- fix-protocol - 在 quickfixj 中发送修复字符串而不是 quickfix.Message
- angularjs - 将 CSRF 令牌存储在 cookie 中是否足以防止 CSRF?