Я запускаю несколько параллельных выполнений с asyncio.Semaphore
над заказанным List
.
async def send_cus(cus_id):
async with ClientSession(connector=TCPConnector(limit=0)) as session:
num_parallel = asyncio.Semaphore(20)
async def send_cust_2(cust_id):
async with num_parallel:
# do something ...
tasks = list(
send_cust_2(cust_id)
for cus_id in my_ordered_lst
)
await asyncio.gather(*tasks)
Дело в том, что он выполняется неупорядоченным образом, независимо от порядка my_ordered_lst
, Я понимаю, что это потому, что мы не можем гарантировать гарантированный порядок выполнения для потоков или разветвлений процессов без синхронизации элементов.
Есть ли способ получить упорядоченное выполнение в течение List
, при этом все еще имея параллельное выполнение? Как сначала отправить 1-й. получить блокировку, отправить, затем отправить, получить блокировку и т. д.