Запускать несколько чат-ботов в telegram [python] - PullRequest
0 голосов
/ 19 ноября 2018

Чего я хочу достичь: у меня есть таблица токенов чат-бота, которая регулярно обновляется. Моя цель состоит в том, чтобы: 1) Проверьте, запущен ли токен чат-бота в потоке

2) Если токен не запущен: запустить поток

3) Если по какой-либо причине один из потоков умер, создайте новый с тем же маркером

Моя проблема: я всегда получаю сообщение «Ошибка при получении обновлений: конфликт: прекращен другим запросом getUpdates;»

Я понимаю, что мое решение не подходит для запуска нескольких экземпляров ботов, но я не нашел другого решения для этого.

# my_threads = {
#     'token1': threading.Thread( name='token1'),
#     'token2': threading.Thread( name='token2')
# }
my_threads = {}

while True:
    for doc in db["admin_chats"].find():  # loop over tokens 
        if doc["token"] not in my_threads.keys():
            new_thread = threading.Thread(target=bot_runner.run, args=(doc,), name=doc["token"])
            my_threads[doc["token"]] = new_thread
            new_thread.daemon = True
            new_thread.start()

            print "created thread " + doc["token"]
    for key, thread in my_threads.iteritems():
        if not thread.is_alive():
            doc = dict()
            doc["token"] = key
            new_thread = threading.Thread(target=bot_runner.run, args=(doc,), name=doc["token"])
            new_thread.start()
            my_threads[doc["token"]] = new_thread
            print "restarted thread " + doc["token"]
            time.sleep(2)
    time.sleep(5)

1 Ответ

0 голосов
/ 20 ноября 2018

Я думаю, что проблема не лежит в этом фрагменте кода, но в bot_runner.run.Ошибка: Error while getting Updates: Conflict: terminated by other getUpdates request; происходит, когда сеанс не был правильно завершен ( см. ).Что вам нужно сделать, так это убедиться, что вы прервете сеансы до того, как ваши потоки закроются!Другими словами: FIX THE bot_runner.run function.

...