&引用;RuntimeError:此事件循环已在运行;;调试aiohttp、异步IO和IDE“;spyder3“;在python 3.6.5中

&引用;RuntimeError:此事件循环已在运行;;调试aiohttp、异步IO和IDE“;spyder3“;在python 3.6.5中,python,spyder,python-asyncio,aiohttp,Python,Spyder,Python Asyncio,Aiohttp,我很难理解为什么会出现“RuntimeError:此事件循环已在运行”运行时错误。我曾尝试运行“”中的代码片段,但我一直遇到相同的问题 教程中的代码片段: 教程片段的结果(从spyder IDE运行代码时): RuntimeError:此事件循环已在运行 <!doctype html>" 个人代码片段的结果(从spyder IDE运行代码时): RuntimeError:此事件循环已在运行 <!doctype html>" {“买入价”:“14.9000”,

我很难理解为什么会出现“RuntimeError:此事件循环已在运行”运行时错误。我曾尝试运行“”中的代码片段,但我一直遇到相同的问题

教程中的代码片段:



教程片段的结果(从spyder IDE运行代码时):


RuntimeError:此事件循环已在运行

<!doctype html>"

个人代码片段的结果(从spyder IDE运行代码时):


RuntimeError:此事件循环已在运行

<!doctype html>"
{“买入价”:“14.9000”,“卖出价”:100,“买入价”:“14.0100”,“买入价”:100,“最后交易价”:“14.7900”,“最后延长交易时间交易价”:“14.7900”,“上一次收盘”:“14.3600”,“调整后的上一次收盘”:“14.3600”,“上一次收盘日期”:“2018-05-07”,“符号”:“冲浪”,“交易暂停”:假,“有交易”:真,“最后交易价”:“合并来源”,“更新日期:”2018-05-08T20:01:21Z,“文书”:


来自个人代码片段的结果(从cmd“python personal_snippet.py”运行时):


{“买入价”:“14.9000”,“卖出价”:100,“买入价”:“14.0100”,“买入价”:100,“最后交易价”:“14.7900”,“最后延长交易时数”:“14.7900”,“前一次收盘”:“14.3600”,“调整后的前一次收盘”:“14.3600”,“前一次收盘日期”:“2018-05-07”,“符号”:“冲浪”,“交易暂停”:假,“交易过”:真,“最后一次交易价”:“合并来源”更新地址:“2018-05-08T20:01:21Z”,“仪器”: ['{“询问价格”:“14.9000”,“询问价格”:100,“投标价格”:“14.0100”,“投标价格”:100,“最后交易价格”:“14.7900”,“最后延长时间交易价格”:“14.7900”,“上一次交易价格”:“14.3600”,“调整后的上一次交易价格”:“14.3600”,“上一次交易日期”:“2018-05-07”,“符号”:“冲浪”,“交易停止”:假,“有”:真,“最后交易价格”:“合并”更新地址:“2018-05-08T20:01:21Z”,“仪器”:“}”


上述结果似乎指出了与Spyder IDE相关的问题。


我有两个问题:

  • 为什么会出现此错误? 似乎其他人在运行教程代码时没有遇到此错误。(可能的答案是:SPYDER3中可能存在错误)

    这似乎只发生在spyder IDE中。我从cmd提示符运行了两段代码,没有出现错误。感谢@MikhailGerasimov的建议

  • 假设我有两个print命令(在第二段代码中),并且只打印了一组“数据”,那么为什么数据没有返回到原始调用(results=loop.run_直到完成(get_async_url(url))(可能的答案是:SPYDER3中可能存在的错误)

    这似乎只发生在spyder IDE中。我在cmd提示符中运行了第二段代码,两个打印都出现了。感谢@MikhailGerasimov的建议




  • 这两个问题(可能)都已得到回答。我将在向spyder IDE提交问题时引用此问题。随着spyder方面的情况发展,我将继续更新此问题。如果他们回来说问题不在他们身上,那么我将以稍微不同的格式重新打开这些问题

    谢谢你的帮助




    指向Spyder IDE github中引用的问题提交的链接:





    问题似乎与使用的IDE(Spyder3)有关。我昨晚尝试使用PyCharm社区版运行代码。代码运行时没有问题


    我向Spyder3提交了一个bug。

    也许我很幸运,但我降级了Tornado。请参阅

    我对Spyder也有同样的问题,唯一对我有效的解决方案是使用

    使用以下命令安装nest\u asyncio

    pip install nest_asyncio
    
    在文件中添加以下行

    import nest_asyncio
    nest_asyncio.apply()
    
    这个问题必须解决


    从医生的

    按设计,asyncio不允许嵌套其事件循环。这带来了一个实际问题:在事件循环已在运行的环境中,无法运行任务并等待结果。尝试这样做将导致错误“RuntimeError:此事件循环已在运行”

    这个问题会在各种环境中出现,例如web服务器、GUI Jupyter笔记本中的应用程序和应用程序

    此模块修补asyncio以允许嵌套使用asyncio.run和 loop.run_,直到_完成


    在我看来,Spyder运行自己的事件循环。不能在一个线程中运行两个事件循环

    asyncio.run(coro,*,debug=False)

    在以下情况下无法调用此函数: 另一个asyncio事件循环正在同一线程中运行

    这就是我的工作原理。如果没有其他运行循环,我将启动自己的循环:

    import asyncio
    
    async def say_after(delay, what):
        await asyncio.sleep(delay)
        print(what)
    
    async def main():
        await say_after(2, 'done')
    
    await say_after(1, 'ahoy')    
    
    loop = asyncio.get_event_loop()
    print(loop) # <_WindowsSelectorEventLoop running=True closed=False debug=False>
    if loop.is_running() == False:
        asyncio.run(main())
    else:
        await main()
    
    导入异步IO
    异步定义在(延迟,什么)之后说:
    等待异步睡眠(延迟)
    打印(什么)
    异步def main():
    等待(2,‘完成’)后说
    等待在(1,'ahoy'之后说)
    loop=asyncio.get\u event\u loop()
    打印(循环)#
    如果loop.is_running()=False:
    asyncio.run(main())
    其他:
    等待主
    
    bonus question应该是一个新的、单独的问题OK user770。我应该编辑没有“bonus question”的问题吗?这是正确的。“为什么我会出现这个错误?”?似乎其他人在运行教程代码时不会遇到此错误”,那么,您编写的“个人代码片段(不是来自上面引用的教程):“,那么您是否运行相同的代码?@RyanBaumgartner first代码段不包含任何错误,本身不应导致RuntimeError。你们确定你们提供的代码片段和你们正在运行的文件中的代码完全相同吗?您是从console
    python main.py
    运行代码,还是以其他方式运行代码?您是否找到了解决方案?自从从升级后,我遇到了完全相同的问题
    import asyncio
    
    async def say_after(delay, what):
        await asyncio.sleep(delay)
        print(what)
    
    async def main():
        await say_after(2, 'done')
    
    await say_after(1, 'ahoy')    
    
    loop = asyncio.get_event_loop()
    print(loop) # <_WindowsSelectorEventLoop running=True closed=False debug=False>
    if loop.is_running() == False:
        asyncio.run(main())
    else:
        await main()