Это похоже на распространенную проблему, см., Например: 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
И переменная результатов остается неопределенной.
Как я могу раскрутить список сопрограмм и правильно собрать их результаты?