【发布时间】:2017-05-11 05:43:25
【问题描述】:
我正在通过解释器直接启动我的 Flask 应用程序。
if __name__ == '__main__':
t = Thread(target=run_schedule)
t.start()
context = ('cert.pem', 'key.pem')
app.run(host='0.0.0.0',port=8080,debug=False,ssl_context=context)
run_schedule 函数永远循环,偶尔解除阻塞以执行任务。
显然当我不再调试时我应该使用像gunicorn这样的wsgi服务器,但是它没有通过main()调用模块,所以线程没有启动。
将它们放在该块之外是行不通的,因为如果任何其他代码导入该模块,线程就会启动!
@before_first_request 几乎是我需要的,但它需要我先用请求戳服务器。不理想。
推荐的方法是什么? (或者后台线程是否违背 wsgi 哲学?)
【问题讨论】:
-
您不应在服务器应用程序中生成后台线程。例如一个 WSGI 服务器might spawn several server apps 然后你有几个后台线程。而是查看cronjobs 或job queues like Celery。
-
明白了,谢谢。要将其移至答案以便我接受吗?
标签: python flask wsgi gunicorn