Запуск нескольких ботов одновременно
Решил уместить функционал нескольких ботов в один файл, так как уже много их в папке. Но проблема что из всех ботов запускается только первый в
if __name__ == '__main__':
while True:
try:
bot1.polling(non_stop=True, interval=0, timeout=60)
bot2.polling(non_stop=True, interval=0, timeout=60)
bot3.polling(non_stop=True, interval=0, timeout=60)
except Exception as e:
time.sleep(2)
Запускается только bot1, функционал других не работает, как это исправить и сделать запуск сразу нескольких ботов, или это невозможно на telebot и надо переходить на aiogram? Пробовал реализацию через threading:
def bot1polling():
bot1.polling(non_stop=True, interval=0)
def bot2polling():
bot2.polling(non_stop=True, interval=0)
def bot2polling():
bot3.polling(non_stop=True, interval=0)
if __name__ == '__main__':
while True:
try:
bot1poll = Thread(target=bot1polling, daemon=True)
bot1poll.start()
bot2poll = Thread(target=bot2polling, daemon=True)
bot2poll.start()
bot3poll = Thread(target=bot3polling, daemon=True)
bot3poll.start()
except Exception as e:
time.sleep(2)
Ответы (2 шт):
Автор решения: Pet Linux
→ Ссылка
Попробуйте сделать так:
В начале файла:
from multiprocessing import Process
В конце файла (перезапишите код if __name__ == '__main__' этим кодом):
def start_bot1():
bot1.polling(none_stop=True, interval=0, timeout=60)
def start_bot2():
bot2.polling(none_stop=True, interval=0, timeout=60)
def start_bot3():
bot3.polling(none_stop=True, interval=0, timeout=60)
if __name__ == '__main__':
while True:
try:
bot_thread1 = Process(target=start_bot1, args=())
bot_thread2 = Process(target=start_bot2, args=())
bot_thread3 = Process(target=start_bot3, args=())
bot_thread1.start()
bot_thread2.start()
bot_thread3.start()
bot_thread1.join()
bot_thread2.join()
bot_thread3.join()
except Exception as e:
time.sleep(10)
Автор решения: ScalesAir
→ Ссылка
Создаем список из ботов в переменной bots и потом передаем этот список в start_polling. Это код для aiogram v3
async def create_bots():
tokens = await base.fetch("SELECT token FROM tb_bots WHERE enable = True")
bots = {}
for i, data in enumerate(tokens, start=1):
token = data.get('token')
bot_name = f"bot{i}"
bots[bot_name] = Bot(token=token, parse_mode="HTML")
return bots
bots = []
bots_dict = await create_bots()
for bot in bots_dict.values():
bots.append(bot)
await bot.delete_webhook(drop_pending_updates=True)
dp.startup.register(startup)
dp.shutdown.register(shutdown)
await dp.start_polling(*bots, polling_timeout=30000, close_bot_session=True)