Мне нужно решить проблему с двумя асинхронными заданиями, используя семафор или некоторую блокировку. Мне нужно передать контроль от одного к другому в циклах while для каждой работы. Первое задание выполняется вечно, а второе в конечном итоге будет завершено.
async def my_worker1(semaphore):
n = random.randint(2, 10)
while n > 0:
n -= 1
async with semaphore:
print("Acquired the worker 1")
await asyncio.sleep(2)
print("Releasing worker 1")
async def my_worker2(semaphore):
while True:
async with semaphore:
print("Acquired the worker 2")
await asyncio.sleep(2)
print("Releasing worker 2")
async def main():
my_semaphore = asyncio.Semaphore()
await asyncio.wait([my_worker1(my_semaphore), my_worker2(my_semaphore)])
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
print("All Workers Completed")
loop.close()
Но в моем коде работает только одно из двух заданий, и он не освобождает семафор до завершения текущего задания.
Acquired the worker 2
Releasing worker 2
Acquired the worker 2
Releasing worker 2
Acquired the worker 2
Releasing worker 2
...
И мне нужно что-то вроде этого:
Acquired the worker 2
Releasing worker 2
Acquired the worker 1
Releasing worker 1
Acquired the worker 1
Releasing worker 1
Acquired the worker 2
Releasing worker 2
...
Извините, если мой вопрос недостаточно ясен.