Gunicorn+Flask中重复启动后台线程问题

假设程序以下:flask

1 if __name__ == '__main__':
2     t = Thread(target=test)
3     t.start()
4     app.run(host='0.0.0.0',port=8080,debug=False)

    gunicorn在启动过程只会从flask的app文件中取出app使用,并不会执行main函数,若是但愿在gunicorn中仍旧能启动后台线程并保证后台线程不由于gunicorn的子进程重复执行,有三种方式。app

1.  使用gunicorn的preload参数。在worker进程被复制(派生)以前载入应用的代码。这种方式,线程执行代码须要写在app文件的全局部分,利用预加载只执行一下。函数

2. 使用flask的app的钩子函数before_first_request。在before_first_request中执行线程。但这种方式必需要有第一个请求才能触发线程启动。spa

3. 使用文件锁。这种方式与第一种方式相同,须要把线程执行的代码写在app文件的全局部分。在第一个子进程启动时建立文件并加锁,在后续的子进程启动时判断锁的状态,若是有锁则不执行。线程

   以上经过奇怪的操做启动后台线程。但不推荐。能够考虑使用celery或者cron等方式实现需求。debug

相关文章
相关标签/搜索