簡體   English   中英

如何從一個過程向另一個過程發出信號?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM