Посмотрите следующий код:
import asyncio
async def count():
print("One")
await asyncio.sleep(1)
print("Two")
async def main():
await asyncio.gather(count(), count(), count()) # THIS LINE
if __name__ == "__main__":
import time
s = time.perf_counter()
asyncio.run(main())
elapsed = time.perf_counter() - s
print(f"{__file__} executed in {elapsed:0.2f} seconds.")
Посмотрите на # THIS LINE
, asyncio.gather может выполнить свою функцию до возвращаемого значения параметра count ().
Но, как я понимаю python. Интерпретатор python считает внешнюю функцию черным ящиком и вначале сосредотачивается на оценке ее параметра. Когда все значение его параметра выполнено, интерпретатор затем передает его в функцию для выполнения.
Согласно моему пониманию выше, не будет разницы между:
await asyncio.gather(count(), count(), count())
и
await (count(), count(), count())
Последующим является неназначенный кортеж.
Но как asyncio.gather
реализует свои задания в такой форме?