Python Asyncio график задач еженедельно - PullRequest
0 голосов
/ 26 февраля 2020

Я пишу диссон-бота в Python, в котором уже есть два перезаписанных метода asyn c on_ready и on_message, чтобы определенным образом реагировать на сообщения.

Теперь я хотел добавить функцию , который следует вызывать раз в неделю. Я пытался что-то с asyncio.sleep (), но я не хочу запускать бота в указанное время c, а затем спать 604,800 сек c (1 неделя в секундах), чтобы повторять эту функцию каждую неделю.

Вот что я получил до сих пор:

class MyClient(discord.Client):

    async def on_ready(self):
        #some initial stuff
        self.loop.create_task(self.routine())

    async def on_message(self, message):
        #reply to chat messages
        await message.channel.send("Reply")

    async def routine(self):
        while True:
            print("I'm on that routine boi")
            await asyncio.sleep(3)

Это работает до сих пор, так что я могу использовать бота в раздоре и получать результаты каждые 3 секунды. Но я бы предпочел что-то вроде из модуля расписания , чтобы использовать что-то вроде

scheduler.every().sunday.at("8:55").do(self.routine())

Есть ли шанс сделать что-то подобное в комбинации с asyncio?

1 Ответ

1 голос
/ 26 февраля 2020

Событие l oop предоставляет механизмы для планирования функций обратного вызова, которые будут вызываться в определенный момент в будущем, как показано здесь в Python документах

class MyClient(discord.Client):

    async def on_ready(self):
        #some initial stuff
        self.loop.create_task(self.routine())

    async def on_message(self, message):
        #reply to chat messages
        await message.channel.send("Reply")

   async def execute():
         res = await loop.call_later(delay, callback, *args)
         delay += delay + 604800 
         return res



    async def routine(self):
        while True:
            print("I'm on that routine boi")
            res = await loop.run_until_complete(execute)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...