Есть 2 задания: "wash_clothes" (job1) и "setup_cleaning_robot" (job2), каждая работа занимает у вас 7 и 3 секунды, вы должны делать это до конца света.
Это мой код:
import asyncio
async def wash_clothes():
print(f'Start job1')
await asyncio.sleep(3)
print(f'Finish job1, took 3 seconds')
async def setup_cleaning_robot():
print(f'Start job2')
await asyncio.sleep(7)
print(f'Finish job2, took 7 seconds')
async def not_really_asyncio():
kk = 1
while True:
job_list = [wash_clothes(), setup_robot()]
await asyncio.gather(*job_list)
kk += 1
async def main():
await not_really_asyncio()
# await really_asyncio() # Still don't know how to do
if __name__ == '__main__':
asyncio.run(main())
Это вывод
Start job1
Start job2
Finish job1, took 3 seconds
Finish job2, took 7 seconds
Start job1
Start job2
Finish job1, took 3 seconds
Finish job2, took 7 seconds
...
...
Но мы знаем, что мы можем надеть одежду, а затем настроить робота-уборщика и отдохнуть (всего несколько секунд ), пока одно из заданий не будет завершено, затем сделайте это прямо сейчас, снова и снова ...
Правильный вывод выглядит следующим образом:
Start job1
Start job2
Finish job1, took 3 seconds
Start job1
Finish job1, took 3 seconds
Start job1
Finish job2, took 7 seconds
Start job2
Finish job1, took 3 seconds
...
...
Пока у меня есть идея использовать многопоточность, но это испортит мой код.
Я хочу, чтобы код был максимально кратким