このようなものが実装されている他のケースを見つけるのに問題があります。WSGI環境で別のスレッドを開始する
私はWerkzeugで構築されたWSGIアプリケーションを持っています。可能であれば、WSGIアプリケーションと同じコンテキストでいくつかのバックグラウンドクリーンアッププロセスを実行したいと思います(私は、アプリケーションとしてサービスが開始されると、必要なバックグラウンドタスクも実行されます)。使用されているWebサーバーはmod_wsgiのApacheです。
提供されているコンテンツが実際に問題にならないため、実際には基本的なWSGIの例を想定してみましょう。私は先に行くと、時限間隔でこれらのタスクを実行することになりcreate_app
関数内の実行の他、非ブロッキングスレッドを開始することが可能だろうofficial Werkzeug docs:
class Shortly(object):
def __init__(self, config):
self.redis = redis.Redis(config['redis_host'], config['redis_port'])
def dispatch_request(self, request):
return Response('Hello World!')
def wsgi_app(self, environ, start_response):
request = Request(environ)
response = self.dispatch_request(request)
return response(environ, start_response)
def __call__(self, environ, start_response):
return self.wsgi_app(environ, start_response)
def create_app(redis_host='localhost', redis_port=6379):
app = Shortly({
'redis_host': redis_host,
'redis_port': redis_port
})
return app
で1 Pocooを持って使用するつもりですか? mod_wsgiは、これが必要とするように '継続的に'アプリケーションを実行しますか?
def create_app(redis_host='localhost', redis_port=6379):
app = Shortly({
'redis_host': redis_host,
'redis_port': redis_port
})
#do some other stuff in a separate thread while the webapp is running
task = threading.Thread(target=DBCleanup, args=(query, stuff))
task.start()
return app
WSGIアプリケーションでデーモンとして起動できないため、終了時にシャットダウンできません。 –
@ IgnacioVazquez-Abramsそれについての私の答えは、大変なことが私を怖がらせるということは悪いですか? ;)このような方法で使用することを意図したスクリプトをPythonで書いたことはありません。あなたはそのテーマの良いプライマーについて知っていますか?ありがとう! – DeaconDesperado