[英]How to signal from one process to another?
我正在編寫一個Slack機器人,團隊可以在其中注冊以添加該機器人來為其團隊服務。
我已經完成了所有工作,但是最后一件事情仍然存在,當他們必須通過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網址,以便如上所述注冊該團隊。
api.add_resource(OAuth, '/oauth')
問題是這將在uwsgi服務器下以不同的進程運行。 對於剛剛以與其他所有bot相同的過程進行了注冊的團隊,該如何為該實例化一個新的bot?
我可能需要做這樣的事情:
為新團隊實例化新的機器人:
bot = RtmBot(team.bot_access_token, team.bot_user_id)
然后生成:
gevent.spawn(bot.start)
但是,如果我在uwsgi的上下文中執行此操作,則該bot將不會在守護程序的上下文中運行。
我不確定是否可以使用gevent庫直接解決此問題。 我需要在uwsgi進程和守護程序之間建立pub子模式。
因此,我嘗試使用pgpubsub
https://bitbucket.org/btubbs/pgpubsub解決此問題。 但是,它只能在同一線程中工作,而gevent會破壞它。
有什么想法嗎?
如果安裝了'psycogreen'軟件包並調用psycogreen.gevent.patch_psycopg(),可以使Gevent與pgpubsub一起使用,以使psycopg2驅動程序在Gevent中正常播放。 我的ToDo應用程序中有一個示例,位於https://bitbucket.org/btubbs/todopy-pg ,它同時使用Gevent和pgpubsub。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.