无法找到其他已实施此类事情的案例。
我有一个使用 Werkzeug 构建的 WSGI 应用程序,如果可能的话,我想在与 WSGI 应用程序相同的上下文中运行一些后台清理进程(我宁愿在 cron 中不让它们单独的脚本,这样当应用程序作为服务启动,必要的后台任务也在运行。)使用的网络服务器是带有 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