Не удается найти другие случаи, когда что-то подобное было реализовано.
У меня есть приложение WSGI, которое было построено с помощью Werkzeug, и я хотел бы запустить некоторые фоновые процессы очистки в том же контексте, что и приложение WSGI (я бы предпочел, чтобы в них не было отдельных скриптов в cron когда приложение запускается как служба, также запускаются необходимые фоновые задачи.) Используемый веб-сервер - Apache с mod_wsgi.
Давайте предположим, что это действительно базовый пример 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