Я писал сценарий для одновременного выполнения нескольких длительных задач и заметил, что одновременно может выполняться только одна задача.После долгих проб и ошибок я понял, что проблема вызвана странным взаимодействием между asyncio.sleep () и print () внутри цикла внутри сопрограммы, которая выполняла каждую задачу.Как только я закомментировал print (), все запустилось одновременно, как и ожидалось.
После некоторого поиска в документации по Python и в Google я все еще не представляю, почему это произошло.
Приведенный ниже пример кода значительно упрощен для иллюстрации проблемы.
Примечание: Python 3.6
async task_coro():
...setup the task...
while not_done():
print(...some informative status stuff...)
## The argument here could be 0.1, 1.0, 10, 100, it doesn't matter.
## as long as the above print() call is uncommented nothing works ;_;
asyncio.sleep(0.1)
if __name__ == '__main__':
task_coros = [
task_coro() for i in range(10)
]
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.gather(*task_coros))
loop.close()