Чего я хочу достичь: у меня есть таблица токенов чат-бота, которая регулярно обновляется. Моя цель состоит в том, чтобы:
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)