Раздор бот и многопоточность

В настоящее время я внедряю бот- диск, использующий библиотеку Rapptz, и столкнулся с проблемой многопоточности. Это, наверное, очень легко, я что-то упускаю наверняка!

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

Вот упрощенный пример того, что я хотел бы сделать

class MyThread(Thread):

def __init__(self, client):
    Thread.__init__(self)
    self.client = client

def run(self):
    while True:
        self.client.send_message(channel, "Sending message every 10 seconds!")
        time.sleep(10)

Дело в том, что я знаю, что send_message Метод асинхронный, но:

  • Когда я ставлю await Ключевое слово перед send_message звоните, мне нужно также определить run метод в качестве сопрограммы. Когда я пытаюсь запустить его, я получаю сообщение. RuntimeWarning: coroutine MyThread.run was never awaited

  • Когда я не помещаю это, я не получаю ошибки, но сообщение все еще не отправлено.

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

0 ответов

Функция должна начинаться с await, чтобы использовать async.

Другие вопросы по тегам