Я пишу Slack bot, где команды могут зарегистрироваться, чтобы добавить этого бота, чтобы служить своей команде.Как подать сигнал от одного процесса другому?
У меня все работает, но последний кусок остается, когда им приходится регистрироваться через oauth, чтобы этот бот фактически начался.
Я первоначально экземпляр бота для каждой команды таким образом:
teams = self.session.query(Team).all()
for team in teams:
bot = RtmBot(team.bot_access_token, team.bot_user_id)
self.bots.append(bot)
Тогда я бегу ботам в неблокируемом GEvent:
for bot in self.bots:
events.append(gevent.spawn(bot.start))
gevent.joinall(events)
Это работает хорошо работает через Python daemon
.
Я также использую oauth url, чтобы зарегистрировать команду, как обсуждалось выше.
api.add_resource(OAuth, '/oauth')
Проблема в том, что это будет работать под сервером uwsgi под другим процессом. Как это может создать экземпляр нового бота для команды, которая только что подписалась в том же процессе, что и каждый другой бот?
я, возможно, нужно сделать что-то вроде этого:
Инстанцировать новый бот для новой команды:
bot = RtmBot(team.bot_access_token, team.bot_user_id)
, а затем икру, что:
gevent.spawn(bot.start)
Но если бы я сделал это в контексте uwsgi, этот бот не будет запущен в контексте демона.
Я не уверен, что эту проблему можно решить напрямую с помощью библиотеки gevent. Мне нужен был какой-то шаблон паба между процессом uwsgi и демоном.
Следовательно, я попытался решить эту проблему, используя pgpubsub
https://bitbucket.org/btubbs/pgpubsub. Однако он работает только в одном потоке, и gevent его разрывает.
Любые идеи, пожалуйста?