Хотел распараллелить запросы клиентов на телеграм бота с помощью
gunicorn. Использую
aiohttp в качестве сервера. При запуске с одним worker-ом работает нормально, но, если worker-ов больше чем один, не запускаются. Можно ли запустить ту часть, где тренируется модель только один раз, потом во всех workers использовать ее.
Большую часть кода в боте я убрал, так как они ничего не значат.
Один worker:
Несколько worker-ов:
#
bot.py# -------------------------------------------------------------------------------------------------------
model.train()
Здесь тренируется модель, которая будет что-то предсказывать.
# -------------------------------------------------------------------------------------------------------
bot = telebot.AsyncTeleBot(token, threaded=True)
# Хэндлер на команды /start и /help
@bot.message_handler(func=lambda message: True, commands=['help', 'start'])
def welcome_message(message):
bot.send_message(message.chat.id, "Привет"
parse_mode="Markdown")
bot.remove_webhook()
bot.set_webhook(url=WEBHOOK_URL_BASE+WEBHOOK_URL_PATH,
certificate=open(WEBHOOK_SSL_CERT, 'r'))
bot.skip_pending = True
#
serv.pyfrom aiohttp import web
import telebot
from bot import bot
app = web.Application()
# Process webhook calls
async def handle(request):
if request.match_info.get('token') == bot.token:
request_body_dict = await request.json()
update = telebot.types.Update.de_json(request_body_dict)
bot.process_new_updates([update])
return web.Response()
else:
return web.Response(status=403)
app.router.add_post('/{token}/', handle)