繁体   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