asyncio: RuntimeError, этот цикл событий уже запущен - PullRequest
0 голосов
/ 11 ноября 2018

Это похоже на распространенную проблему, см., Например: RuntimeError: Этот цикл событий уже выполняется в python

Но в моем случае я запускаю цикл обработки событий только один раз, по крайней мере, насколько я могу видеть. Также этот пример следует непосредственно инструкциям здесь :

import asyncio

loop = asyncio.get_event_loop()

async def coroutine():
    print("hey")
    await asyncio.sleep(1)
    print("ho")
    return 1


async def main():

    tasks = []
    for i in range(2):
        tasks.append(asyncio.ensure_future(coroutine()))
    await asyncio.gather(*tasks)

results = loop.run_until_complete(main())
loop.close()

Это печатает сообщение об ошибке, и вывод print () вызывает в сопрограммах:

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-1-f4a74fbfac46> in <module>
     16     await asyncio.gather(*tasks)
     17 
---> 18 results = loop.run_until_complete(asyncio.gather(*tasks))
     19 loop.close()

~/anaconda3/envs/keras_dev/lib/python3.6/asyncio/base_events.py in run_until_complete(self, future)
    453         future.add_done_callback(_run_until_complete_cb)
    454         try:
--> 455             self.run_forever()
    456         except:
    457             if new_task and future.done() and not future.cancelled():

~/anaconda3/envs/keras_dev/lib/python3.6/asyncio/base_events.py in run_forever(self)
    407         self._check_closed()
    408         if self.is_running():
--> 409             raise RuntimeError('This event loop is already running')
    410         if events._get_running_loop() is not None:
    411             raise RuntimeError(

RuntimeError: This event loop is already running
hey
hey
ho
ho

И переменная результатов остается неопределенной.

Как я могу раскрутить список сопрограмм и правильно собрать их результаты?

1 Ответ

0 голосов
/ 28 ноября 2018

Я также сталкивался с этой проблемой после выполнения некоторых обновлений. Оказывается, что пакет tornado, скорее всего, виновник. Если у вас tornado>=5.0, то запуск циклов событий в записной книжке вызывает конфликты. Здесь есть подробное обсуждение здесь , но решение, на данный момент, состоит в том, чтобы просто понизить до pip install tornado==4.5.3.

...