roomONmoon
@roomONmoon

Отмена coroutines на повторное нажатие кнопки?

Как я мог бы отменить уже выполняющиеся задачи, при повторном нажатии на кнопку?

Код который я набросал, но он конечно же не работает
class TasksManager:
    def __init__(self) -> None:
        self.state = False
        self.lst = [self.task_1, self.task_2, self.task_3]
 
    async def task_1(self):
        for i in range(10):
            await asyncio.sleep(1)
            print("Task 1: ", i)
    
    async def task_2(self):
        for i in range(10):
            await asyncio.sleep(1)
            print("Task 2: ", i)
 
    async def task_3(self):
        for i in range(10):
            await asyncio.sleep(1)
            print("Task 3: ", i)
 
    async def click(self, e: ft.TapEvent):
        if not self.state:
            self.state = True
            lst = [asyncio.create_task(task()) for task in self.lst]
            done, pending = await asyncio.wait(lst, return_when=asyncio.FIRST_COMPLETED)
            print(done, pending)
        else:
            # здесь нужно отменить корутины
            for task in pending:
                task.cancel()
 
def main(page: ft.Page):
    manager = TasksManager()
    button = ft.TextButton("Click", on_click=manager.click)
    page.add(button)
    page.update()
 
ft.app(main)
  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
@Everything_is_bad
1. ну так pending в else у тебя не определен, минимум стоит сделать его полем объекта
2. list это имя встроенного объекта, зачем ты его переопределяешь?
3. всегда показывай какие ошибки в твоем коде возникли
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы