Возникли проблемы с поиском других случаев, когда что-то подобное было реализовано.
У меня есть приложение 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