Geventプロセスとサーバーを同時に実行します
質問
与えられたモジュールを実行する方法App Serverを実行しているのと同時に、必ずしもルーティングを使用しているとは同時に実行されます(デーモンサービス)。
例えば:
#some other route functions app.post(...)
#some other concurrent functions
def alarm():
'''
Run this service every X duration
'''
ALARM = 21
try:
while 1:
#checking time and doing something. Then finding INTERVAL
gevent.sleep(INTERVAL)
except KeyboardInterrupt,e:
print 'exiting'
.
main ?
の後、このように上記のように使用する必要がありますか。gevent.joinall(gevent.spawn(alarm))
app.run(....)
.
または
gevent.joinall((gevent.spawn(alarm),gevent.spawn(app.run)))
.
目標は、デーモンサービスのようなこれらのアラームを実行し、残りのサービスオペレーションが通常どおりに機能しながら、仕事やスヌーズを行います。 サーバーも同時に起動する必要があります。正しいトラックにない場合は訂正してください。
解決
Geventはそれ自身のWSGIサーバーを搭載しているので、app.run
を使用する必要はありません。サーバーは次のとおりです。
はどちらも同じインタフェースを提供します。
あなたはあなたが欲しいものを達成するためにこれらを使うことができます:
import gevent
import gevent.monkey
gevent.monkey.patch_all()
import requests
from gevent.pywsgi import WSGIServer
# app = YourBottleApp
def alarm():
'''
Run this service every X duration
'''
ALARM = 21
while 1:
#checking time and doing something. Then finding INTERVAL
gevent.sleep(INTERVAL)
if __name__ == '__main__':
http_server = WSGIServer(('', 8080), app)
srv_greenlet = gevent.spawn(http_server.serve_forever)
alarm_greenlet = gevent.spawn(alarm)
try:
gevent.joinall([srv_greenlet, alarm_greenlet])
except KeyboardInterrupt:
http_server.stop()
print 'Quitting'
. 所属していません StackOverflow