このようなものが実装されている他のケースを見つけるのに問題があります。
Werkzeugで構築されたWSGIアプリがあり、可能であればWSGIアプリケーションと同じコンテキストでバックグラウンドクリーンアッププロセスを実行したいと思います(アプリケーションがcronで別々のスクリプトを使用したくない場合は、はサービスとして開始され、必要なバックグラウンドタスクも実行されます。)使用されているWebサーバーは、mod_wsgiを備えたApacheです。
提供されているコンテンツは実際には問題ではないため、実際に基本的なWSGIの例を想定してみましょう。Pocooが公式のWerkzeugドキュメントで持っているものを使用します:
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
関数内で別の非ブロッキング実行スレッドを開始してcreate_app
、これらのタスクを一定の間隔で実行することは可能でしょうか?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