이와 비슷한 경우가있는 다른 사례를 찾는 데 문제가 있습니다.WSGI 환경에서 별도의 스레드 시작
나는 Werkzeug로 빌드 된 WSGI 응용 프로그램을 가지고 있으며 가능한 경우 WSGI 응용 프로그램과 동일한 컨텍스트에서 일부 백그라운드 정리 프로세스를 실행하고 싶습니다. (나는 cron에서 스크립트를 별도로 작성하지 않을 것입니다. 방법으로 응용 프로그램이 서비스로 시작될 때 필요한 배경 작업도 실행됩니다.) 사용중인 웹 서버는 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
에서 하나 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