2016-05-06 4 views
0

私はスラックボットを書いています。スラックボットは、チームがそのチームに奉仕するためにそのボットを追加するためにサインアップすることができます。あるプロセスから別のプロセスに信号を送る方法は?

私はすべての機能を持っていますが、最後の部分は、実際に起動したボットを得るために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プロセスとデーモンの間にpubサブパターンが必要でした。

したがって、私はpgpubsubhttps://bitbucket.org/btubbs/pgpubsubを使ってこれを解決しようとしました。しかし、それは同じスレッド内でのみ動作し、geventはそれを壊します。

どのようなアイデアをお願いしますか?

答えて

0

「psycogreen」パッケージをインストールし、psycoggreen.gevent.patch_psycopg()を呼び出してpsycopg2ドライバをGeventでうまく再生させる場合は、Geventをpgpubsubとともに使用できます。私のToDoアプリには、Geventとpgpubsubの両方を使用するhttps://bitbucket.org/btubbs/todopy-pgの例があります。

関連する問題