asyncpraw 라이브러리 를 사용하려고하는데 RuntimeError: Event loop is closed
.
이것은 내 코드와 역 추적입니다.
암호
import asyncio
import asyncpraw
async def main():
reddit = asyncpraw.Reddit('praw_ini_name')
print('User is', await reddit.user.me())
await reddit.close()
asyncio.run(main())
역 추적
User is python_user
Exception ignored in: <function _ProactorBasePipeTransport.__del__ at 0x0000021D2898C1F0>
Traceback (most recent call last):
File "C:\Program Files\Python39\lib\asyncio\proactor_events.py", line 116, in __del__
self.close()
File "C:\Program Files\Python39\lib\asyncio\proactor_events.py", line 108, in close
self._loop.call_soon(self._call_connection_lost, None)
File "C:\Program Files\Python39\lib\asyncio\base_events.py", line 746, in call_soon
self._check_closed()
File "C:\Program Files\Python39\lib\asyncio\base_events.py", line 510, in _check_closed
raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
그러나 이렇게 이벤트 루프를 시작하면 이것은 발생하지 않습니다 (예외 없음).
import asyncio
import asyncpraw
async def main():
reddit = asyncpraw.Reddit('praw_ini_name')
print('User is', await reddit.user.me())
await reddit.close()
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
나는 최신 파이썬 버전에서 이벤트 루프를 시작하는 선호되는 방법이 첫 번째 스 니펫에 표시된 방법이라고 가정하고 있는데, 왜 작동하지 않습니까? 출력을 인쇄하더라도 내 코드에서 예외가 발생하는 이유는 무엇입니까?
저는 asyncpraw
7.2.0 과 함께 Python 3.9.2를 사용하고 있습니다.
내가 본 Asyncio 이벤트 루프 폐쇄이다 , Python3.x RuntimeError에 이벤트 루프가 닫혀 및 Aiohttp, Asyncio : RuntimeError에 이벤트 루프가 닫혀 그리고 나는 그들이 속는하지 않습니다 생각합니다. 내 질문은 왜 하나는 작동하지만 다른 하나는 작동하지 않는지 묻습니다.
사용하지 않으면 reddit.close()
다음을 얻습니다.
User is python_user
Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x0000025BAAAEF8B0>
Unclosed connector
connections: ['[(<aiohttp.client_proto.ResponseHandler object at 0x0000025BAAAF1640>, 174448.968)]']
connector: <aiohttp.connector.TCPConnector object at 0x0000025BAAAEFA90>
감사합니다.
asyncio.run
완료시 명시 적으로 루프를 닫습니다.
asyncio.run (coro, *, debug = False)
[...]
이 함수는 항상 새 이벤트 루프를 만들고 끝에서 닫습니다.
이는 이벤트 루프가 완료 되면 정리에 사용할 수 없음을 의미합니다 main
. 대신 비동기 생성기 를 통해 또는 동 기적으로 정리를 결정적으로 수행해야합니다 .
루프를 수동으로 관리하고를 호출하지 않는 loop.close()
경우 루프를 사용하여 정리 콜백을 예약 할 수 있습니다. 이것이 루프가 명시 적으로 재개되지 않는 한 정리가 실제로 실행 된다는 것을 반드시 의미하는 것은 아닙니다 .
특정 문제는 aiohttp 3.x 의 알려진 문제입니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다