@Held6991

Как исправить ошибку в имитировании процесса?

Здраствуйте, пытаюсь реализовать имитацию процесса из этой темы - 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())
  • Вопрос задан
  • 94 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы