Я видел несколько базовых руководств по Python 3.5 для asyncio, выполняющих ту же операцию в различных вариантах. В этом коде:
import asyncio
async def doit(i):
print("Start %d" % i)
await asyncio.sleep(3)
print("End %d" % i)
return i
if __name__ == '__main__':
loop = asyncio.get_event_loop()
#futures = [asyncio.ensure_future(doit(i), loop=loop) for i in range(10)]
#futures = [loop.create_task(doit(i)) for i in range(10)]
futures = [doit(i) for i in range(10)]
result = loop.run_until_complete(asyncio.gather(*futures))
print(result)
Все три варианта выше, которые определяют переменную futures
, достигают того же результата; единственное различие, которое я вижу, заключается в том, что с третьим вариантом выполнение не соответствует порядку (что в большинстве случаев не имеет значения). Есть ли другая разница? Существуют ли случаи, когда я не могу просто использовать простейший вариант (обычный список сопрограмм)?