A-A+

python flask schedule重复运行 任务被重复执行问题 解决方案

2019年11月14日 11:23 学习笔记 暂无评论 阅读 59 views 次

【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是txt格式!】

注意注意注意,先暂时抛开任务不谈!看下面的代码,这样有助于你快速定位你的问题点:

#!/usr/bin/env python
from datetime import datetime
from app import app
import config

if __name__ == '__main__':
    print '################### Restarting @', datetime.utcnow(), '###################'
    app.run(port=4004, debug=True, host='0.0.0.0')

你可以运行一下上面的代码,结果就是如下:

################### Restarting @ 2014-08-26 10:51:49.167062 ###################
################### Restarting @ 2014-08-26 10:51:49.607096 ###################

看到结果了么,运行了两次,那么为什么运行两次呢?
问题点就在于flask框架,重点解释如下:

Werkzeug重新加载程序会生成一个子进程,以便每次代码更改时都可以重新启动该进程。Werkzeug是在你调用时向Flask提供开发服务器的库app.run()。

参见restart_with_reloader()功能代码 ; 您的脚本将再次使用运行subprocess.call()。

如果设置use_reloader为False,则丢失重新加载功能:

app.run(port=4004, debug=True, host='0.0.0.0', use_reloader=False)

你也可以在使用flask run命令时禁用重新加载器:

FLASK_DEBUG=1 flask run --no-reload

你还可以直接关闭调试模式,例如:

app.run(port=4004, debug=False, host='0.0.0.0')  #注意哦,debug模式已经关闭了

-------------------------------------------------------------------------------------
Werkzeug是一个WSGI工具包,他可以作为一个Web框架的底层库。这里稍微说一下, werkzeug 不是一个web服务器,也不是一个web框架,而是一个工具包,官方的介绍说是一个 WSGI 工具包,它可以作为一个 Web 框架的底层库,因为它封装好了很多 Web 框架的东西,例如 Request,Response 等等。

例如我最常用的 Flask 框架就是一 Werkzeug 为基础开发的。

werkzeug 提供了 python web WSGI 开发相关的功能:

路由处理:如何根据请求 URL 找到对应的视图函数
request 和 response 封装: 提供更好的方式处理request和生成response对象
自带的 WSGI server: 测试环境运行WSGI应用

--------------------------------------------------------------------------------------

参考来源:
https://stackoverflow.com/questions/25504149/why-does-running-the-flask-dev-server-run-itself-twice
https://www.jianshu.com/p/db3f994c3d90

布施恩德可便相知重

微信扫一扫打赏

支付宝扫一扫打赏

×
标签:

给我留言