Как переделать метод, чтобы он выполнялся в фоне?

Подскажите пожалуйста как переделать метод start. Чтобы он выполнялся в фоне, и когда вызывался asyncio.sleep, засыпала не вся ветка кода что вызвала её, а метод start возвращала управление обратно, чтобы create_timer и func продолжила выполнение. А когда asyncio.sleep закончится, функция start продолжила выполнение и выполнилось в фоне.

Проблема в том, что метод start блокирует всю ветку куда что его вызвала, вместо выполнения в фоне.

Это примерный неполный кусок кода для наглядности:
...
class ClassName():
    async def func(self):
        ...
        await timer_manager.create_timer(args...)
        ...

class TimerManager():
    _timers = {}
    time = 0

    def __init__(self, time):
        self.time = time

    async def create_timer(self, args...):
        self._timers[args...] = Timer(self.time, args...)
        await self._timers[args...].start()

    async def delete_timer(self, args...):
        try:
            ...
            self._timers.pop(args...)
        except:
            pass


class Timer():
    time = 0
    ...

    def __init__(self, time, args...):
        self.time = time
        ...

    async def start(self):
        await asyncio.sleep(self.time)
        ...
...
timer_manager = TimerManager(args...)
...
  • Вопрос задан
  • 214 просмотров
Решения вопроса 1
@MEDIOFF
Python Developer
Вы вызываете start как простую функцию await self._timers[args...].start() естественно что она будет блокировать стек, и ожидать окончания, почитайте про create_task в asincio и по корутины в целом, и используйте его, создавая задачи на запуск таймера, а не просто вызывая start
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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