【python asyncio 运行报错】:raise RuntimeError(‘There is no current event loop in thread %r‘)
生活随笔
收集整理的這篇文章主要介紹了
【python asyncio 运行报错】:raise RuntimeError(‘There is no current event loop in thread %r‘)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
代碼:
# 執行第一個協程程序 asyncio.run(S.crawl_url())select_date = S.select_date() select_keyword = S.select_keyword(select_date) # 列表# 第二個協程 loop = asyncio.get_event_loop() loop.run_until_complete(asyncio.wait([S.parse_html(url) for url in select_keyword])) loop.close()報錯:
raise RuntimeError('There is no current event loop in thread %r.
’ RuntimeError: There is no current event loop in thread ‘MainThread’.
翻譯:
引發RuntimeError(‘線程%r中沒有當前事件循環。’)
在主線程中沒有當前事件循環。
出現錯誤原因:
asyncio僅為主線程生成一個事件循環,
猜測:我在代碼中,執行這個協程之前還有一個協程調用,下面的 loop = asyncio.get_event_loop() 并沒有獲取到事件循環,所以導致報錯:在主線程沒有事件循環。簡單說,就是在同一線程中,第二個協程受到第一個的干擾。
因為,當我將上面的第一個協程代碼注釋掉后,下面的代碼就不會報錯。
解決辦法:
在第二個協程獲取事件循環前添加下面兩行代碼:
new_loop = asyncio.new_event_loop() asyncio.set_event_loop(new_loop)修改后代碼:
# 執行第一個協程程序 asyncio.run(S.crawl_url())select_date = S.select_date() select_keyword = S.select_keyword(select_date) # 列表# 第二個協程 new_loop = asyncio.new_event_loop() asyncio.set_event_loop(new_loop) loop = asyncio.get_event_loop() loop.run_until_complete(asyncio.wait([S.parse_html(url) for url in select_keyword])) loop.close()總結
以上是生活随笔為你收集整理的【python asyncio 运行报错】:raise RuntimeError(‘There is no current event loop in thread %r‘)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV与图像处理学习十七——Ope
- 下一篇: python .py文件变为.so文件进