2016-05-06 26 views
0

Ich schreibe einen Slack-Bot, wo Teams sich anmelden können, um diesen Bot hinzuzufügen, um ihrem Team zu dienen.Wie von einem Prozess zum anderen zu signalisieren?

Ich habe alles funktioniert, aber das letzte Stück bleibt, wenn sie sich über oauth anmelden müssen, damit der Bot tatsächlich gestartet wird.

ich instanziiert zunächst einen Bot für jedes Team auf diese Weise:

teams = self.session.query(Team).all() 
for team in teams: 
    bot = RtmBot(team.bot_access_token, team.bot_user_id) 
    self.bots.append(bot) 

Dann laufe ich die Bots in nonblocking GEVENT:

for bot in self.bots: 
    events.append(gevent.spawn(bot.start)) 
gevent.joinall(events) 

, die über eine Python daemon gut läuft funktioniert.

Ich benutze auch eine OAUTH URL, um das Team wie oben beschrieben zu registrieren.

api.add_resource(OAuth, '/oauth') 

Das Problem ist, dass dies unter einem uwsgi-Server unter einem anderen Prozess ausgeführt werden würde. Wie kann es einen neuen Bot für das Team instanziieren, das sich im selben Prozess wie jeder andere Bot angemeldet hat?

Ich brauche vielleicht so etwas wie dies zu tun:

Instantiate einen neuen Bot für das neue Team:

bot = RtmBot(team.bot_access_token, team.bot_user_id) 

und dann laichen, dass:

gevent.spawn(bot.start) 

Aber wenn ich tat, Im Kontext von uwsgi wird dieser Bot nicht im Daemon-Kontext ausgeführt.

Ich bin mir nicht sicher, ob dieses Problem direkt mit gevent Bibliothek gelöst werden kann. Ich brauchte irgendwie ein Pub-Submuster zwischen dem uwsgi-Prozess und dem Daemon.

Daher habe ich versucht, dies zu lösen, indem Sie pgpubsubhttps://bitbucket.org/btubbs/pgpubsub verwenden. Es funktioniert jedoch nur innerhalb desselben Threads und gevent bricht es.

Irgendwelche Ideen bitte?

Antwort

0

Sie können Gevent mit pgpubsub verwenden, wenn Sie das Paket 'psycogreen' installieren und psycogreen.gevent.patch_psycopg() aufrufen, damit der psycopg2-Treiber gut mit Gevent spielt. Es gibt ein Beispiel in meiner ToDo-App unter https://bitbucket.org/btubbs/todopy-pg, das sowohl Gevent als auch pgpubsub verwendet.

Verwandte Themen