Соединение внутри сопрограммы выглядит синхронно с этой сопрограммой, но фактически асинхронно по отношению к циклу событий.Это означает, что вы можете создать любое количество сопрограмм, работающих параллельно, не блокируя друг друга, и в то же время все они выполняются в одном потоке.
Если вы выполняете http, посмотрите на examples parallelзагрузка с использованием aiohttp .Если вам нужны низкоуровневые TCP-соединения, посмотрите примеры в документации и используйте asyncio.gather
для их параллельного запуска:
async def talk(host):
# wait until connection is established, but without blocking
# other coroutines
r, w = await asyncio.open_connection(host, 80)
# use the streams r, w to talk to the server - for example, echo:
while True:
line = await r.readline()
if not line:
break
w.write(line)
w.close()
async def talk_many(hosts):
coros = [talk(host) for host in hosts]
await asyncio.gather(*coros)
asyncio.run(talk_many(["host1", "host2", ...])