Запланировать выполнение задачи Asyncio каждые X секунд? - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь создать бота для разногласий на питоне, который будет проверять активных участников каждые X секунд и награждать участников очками за время, проведенное в Интернете. Я использую Asyncio для обработки команд чата, и это все работает. Моя проблема заключается в том, чтобы найти способ запланировать эту проверку активных участников каждые X секунд с помощью async

Я прочитал документацию по asnycio, но я впервые с ней работаю, и мне трудно сосредоточиться на задачах, циклах, совместных процедурах и т. Д.

@client.event
async def on_message(message):

    # !gamble command
    if message.content.startswith('!gamble'):

        ...code that works....

    # !help command
    elif message.content == '!help':

         ...code that works....

    # !balance command
    elif message.content == '!balance':

      ...code that works....

@client.event
async def on_ready():
    print('Logged in as')
    print(client.user.name)
    print(client.user.id)
    print('------')

//Do this every X seconds to give online users +1 points
async def periodic_task():
      TODO

Моя цель состоит в том, чтобы бот мог обрабатывать команды, передаваемые ему в чате, а также запускать функцию каждые X секунд, не связанную с командами чата или событиями на сервере Discord. Я знаю, как сделать так, чтобы код внутри функции достигал моей цели, но не знаю, как это вызвать

1 Ответ

0 голосов
/ 11 января 2019
async def do_stuff_every_x_seconds(timeout, stuff):
    while True:
        await asyncio.sleep(timeout)
        await stuff()

И добавьте это в цикл.

task = asyncio.create_task(do_stuff_every_x_seconds(10, stuff))

Когда вы больше не хотите этого делать,

task.cancel()
...