2

このようなものが実装されている他のケースを見つけるのに問題があります。

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
4

1 に答える 1

2

読んだ:

http://code.google.com/p/modwsgi/wiki/RegisteringCleanupCode

次のコード モニターの例を参照してください。

http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode#Monitoring_For_Code_Changes

1 つ目は、リクエストの終了時とプロセスの終了時に物事をクリーンアップする方法の一般的な例です。

2 つ目は、バックグラウンド スレッドを作成して定期的に実行し、プロセスの終了時にバックグラウンド スレッドを適切に閉じようとする方法を示しています。

于 2012-01-21T08:15:18.107 に答える