Здраствуйте, пытаюсь реализовать имитацию процесса из этой темы -
https://qna.habr.com/q/1072594
Вышел, вот такой код, в котором асинхронность слегка не асинхронна, ибо мне нужно, чтобы процессы внутри
main
выполнялись постоянно на протяжении 15 секунд, а не ждать, пока все выполниться, а только потом делать следующую итерацию. Подскажите, пожалуйста, как поправить так, чтобы выполнялось именно так, как было задуманно. Заранее всем огромное спасибо.
import random
import asyncio
from time import time
async def CreateQueue():
print(first_queue)
if len(first_queue) < 6:
for i in range(6 - len(first_queue)):
t = random.uniform(1, 2)
await asyncio.sleep(t)
first_queue.append(t)
else:
await asyncio.sleep(random.uniform(1, 2))
items_status[0] += 1
async def QueueWorking():
while True:
try:
item = first_queue.pop(0)
break
except:
pass
if p1.IsBusy == 0:
t2 = asyncio.create_task(WorkingWithProcess(item, p1))
await t2
elif p2.IsBusy == 0:
t3 = asyncio.create_task(WorkingWithProcess(item, p2))
await t3
else:
pass
class FirstProcess():
Name = 'first'
IsBusy = 0
Delay = 5
Item = []
class SecondProcess():
Name = 'second'
IsBusy = 0
Delay = 5
Item = []
async def WorkingWithProcess(item, p):
p.Item.append(item)
await asyncio.sleep(p.Delay)
print(p.Item, 'finished by', p.Name, 'process')
p.Item.pop()
items_status[1] += 1
async def main():
# a = int(input("Time: "))
process_time = time()
a = 15
while time() - process_time < a:
t1 = asyncio.create_task(CreateQueue())
await t1
t4 = asyncio.create_task(QueueWorking())
await t4
print(time() - process_time)
print(first_queue,items_status)
items_status = [0, 0]
first_queue = []
p1 = FirstProcess()
p2 = SecondProcess()
asyncio.run(main())