python 3.7.5: asyncio.get_event_l oop не создал цикл событий - PullRequest
1 голос
/ 17 января 2020

Мой основной поток python не использует asyncio, но создает новый поток, код которого использует asyncio, где он обнаружил ошибку при вызове get_event_loop():

Traceback (most recent call last):
  File "/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/threading.py", line 926, in _bootstrap_inner
    self.run()
  File "/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "/Users/hanxu/work/thunderrock/node_server/quic/udp_async.py", line 33, in udp_async
    loop = asyncio.get_event_loop()
  File "/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/events.py", line 644, in get_event_loop
    % threading.current_thread().name)
RuntimeError: There is no current event loop in thread 'Thread-5'.

Per онлайн-документ Python 3.7 , get_event_loop должен автоматически создать новое событие l oop, если его еще не было. Почему это терпит неудачу в этом случае? Это из-за многопоточности?

Кстати, я делаю следующее, чтобы обойти, но все еще задаюсь вопросом, почему проблема существовала:

    try:
        loop = asyncio.get_event_loop()
    except RuntimeError:
        loop = asyncio.new_event_loop()
        asyncio.set_event_loop(loop)

1 Ответ

0 голосов
/ 18 января 2020

Спасибо за вопрос.

Документация немного некорректна, новый даже l oop неявно создан только для основного потока.

Просьба отслеживать https://bugs.python.org/issue39381 для исправления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...