LINUX.ORG.RU

Как корректно защищать секцию при асинхронной работе

 , ,


0

1

Есть такой код:

async def foo():
  print(1)
  await one()
  print(2)
  await two()
  print(3)

await asyncio.wait([foo(), foo(), foo()])

Как добиться того, чтобы функция foo выполнялась строго последовательно одним «потоком»? То есть, в консоль должно вывести:

1
2
3
1
2
3
1
2
3
★★★★

Последнее исправление: panter_dsd (всего исправлений: 2)

Чем тебя не устраивает Lock, он не reentrant, так что для твоего кейса подойдет.

Deleted
()
Ответ на: комментарий от panter_dsd

Отмена, недочитал:

lock = asyncio.Lock()
with await lock:
  pass
panter_dsd ★★★★
() автор топика

В данном случае лок лишний, просто можно последовательно «ждать» каждый вызов:

await foo()
await foo()
await foo()
provaton ★★★★★
()
Ответ на: комментарий от provaton

Лок не лишний, это условие задачи - мне нужно запустить параллельную обработку, но с защитой определенных секций.

panter_dsd ★★★★
() автор топика
Ответ на: комментарий от panter_dsd

Ты ж об этом не написал когда вопрос задавал.

provaton ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.