python(flask)+apscheduler定时邮件重发两次的问题

工作中遇到一个需求,要在现有系统(airbnb家的开源平台superset)上添加一个定时邮件的功能。

定时邮件功能使用的是apscheduler这个库,关于怎么用这里就不多赘述了反正网上都有。

主要记录一个问题,使用过程中发现邮件有的时候会重发两次,经过研究之后发现是runserver的时候,调度器实例被创建了两次。

这个主要和系统使用的flask的一个reload机制有关(FLASK_USE_RELOAD = True),reload主要用于代码的热更新(简单解释就是,当你runserver启动服务的时候,会先创建一个主进程,主进程再创建一个子进程。子进程是实际运作的系统,而主进程的主要作用在于监听代码的改变,当你python install重装代码时,主进程探测到代码的改变,就会自动重启子进程,达到代码热更新的效果)。

因此当你runserver时,会发现代码被执行了两遍。但在系统中调度器实例只应被执行一次,这时可以添加判断条件:if os.environ.get(‘WERKZEUG_RUN_MAIN‘) == ‘true‘ ,创建主进程时会发现此变量值为None,而创建子进程时此变量为true,仅当此变量为true时创建调度器实例,即可避免上述问题。

参考文章:

http://simple-is-better.com/news/1039

https://stackoverflow.com/questions/25504149/why-does-running-the-flask-dev-server-run-itself-twice

时间: 2024-08-08 03:55:48

python(flask)+apscheduler定时邮件重发两次的问题的相关文章

Python Flask框架——全栈开发(知了课堂)

章节1:Flask视图和URL 课时1[虚拟环境]为什么需要虚拟环境06:28 课时2[虚拟环境]virtualenv创建虚拟环境13:55 课时3[虚拟环境]virtualenvwrapper使用16:42 课时4[Flask预热]课程介绍45:34 课时5[Flask预热]Flask课程准备工作11:30 课时6[Flask预热]URL组成部分详解14:02 课时7[Flask预热]web服务器+应用服务器+web应用框架14:16 课时8[Flask URL]第一个flask程序详解24:

Python Flask高级编程

第1章 课程导语介绍课程的内容1-1 开宗明义1-2 课程维护与提问 第2章 Flask的基本原理与核心知识本章我们首先介绍Python官方推荐的最佳包与虚拟环境管理工具:Pipenv.接着我们来学习唯一URL原则.重定向.响应对象Response.2-1 鱼书是一个什么样的产品2-2 准备工作2-3 使用官方推荐的pipenv创建虚拟环境(很好用哦~)2-4 开发工具推荐2-5 设置开发工具的默认解释器2-6 flask最小原型与唯一URL原则2-7 路由的另一种注册方法2-8 app.run

python学习笔记[3]-邮件的发送

本文摘抄自:http://www.cnblogs.com/xiaowuyi/archive/2012/03/17/2404015.html 一.相关模块介绍 发送邮件主要用到了smtplib和email两个模块,这里首先就两个模块进行一下简单的介绍:    1.smtplib模块 smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])   SMTP类构造函数,表示与SMTP服务器之间的连接,通过这个连接可以向smtp服务器发送指令,执行

AFNetworking+Python+Flask+pyOpenSSL构建iOS HTTPS客户端&服务器端

对于HTTPS我在网上找了一堆资料看了下, 各种协议和证书已经有点晕了 最后我现有的感觉是, 在HTTP服务器上放一个证书, 在原本的HTTP访问之前客户端先检查证书是否正确 如果客户端证书检查正确, 说明对 这个服务器就是我要连接的那个server 不对, 就说明这个server是个假冒的 同样也可以在客户端放一个证书, 服务器端检查客户端传来的证书 如果服务器检查证书正确, 就说明这个客户端是我的小弟 我允许他连接进来 不对, 就说明这个客户端是"卧底", 不能放他进来 好了 不扯

python Flask EasyUI使用说明

0.前言 本文说明如何在flask框架下使用前端组件EasyUI.在flask框架中链接css文件,js脚本和图片等静态文件的方式和其他web服务器存在差别.在flask框架中这些静态文件一般存放与static文件夹中,并通过url_for函数指定static中相对位置和文件名. [代码仓库] 代码仓库位于bitbucket--flask-easyui,请使用支持HTML5的浏览器打开链接. [相关博文] [1]python 扩展库安装 使用第三方镜像源 [2]python Flask 学前班

CentOS6.7+Python+Flask开发框架部署

系统环境: CentOS6.7的Base service版本. 软件包提供: 官方下载 软件包版本: Readline-devel: yum安装 openssl and openssl-devel: yum安装 Python: Python-2.7.6.tar.xz ipython: ipython-1.2.1.tar.gz Setuptools: setuptools-20.3.1.tar.gz pip: pip-8.1.1.tar.gz virtualenv: virtualenv-15.0

Python Flask 在Sina App Engine (SAE)上安家

早就听说了Python的大名,随着的编程语言的理解加深,越发觉得动态语言的威力--真大呀. 趁这段时间不忙,我也用Python写了一个应用,并且将其部署到Sina App Engine (SAE).SAE确实是一个好地方,它支持Python,对于开发者,其使用费用几乎为0. 更重要的是,如果我的这个app不会半路夭折,等它长大后,这个平台也能给予足够的支持. 虽然,整个过程都很简单,但是对于一个新手,特别是从传统C#, Asp.net, IIS阵营过来的开发人员来说,什么都是第一次接触.希望我的

windows下python+flask环境配置详细图文教程

本帖是本人在安装配置python和flask环境时所用到的资源下载及相关的教程进行了整理罗列,来方便后面的人员,省去搜索的时间.如果你在安装配置是存在问题可留言给我. 首先罗列一下python+flask环境所用的一些程序组件的下载地址: 1.python语言环境: http://www.python.org/download/ . 2.setuptools 组件: https://pypi.python.org/pypi/setuptools/0.9.6 . 3.pip 组件: https:/

[Python][flask][flask-login]关于flask-login中各种API使用实例

本篇博文跟上一篇[Python][flask][flask-wtf]关于flask-wtf中API使用实例教程有莫大的关系. 简介:Flask-Login 为 Flask 提供了用户会话管理.它处理了日常的登入,登出并且长时间记住用户的会话. 直白的讲,flask-login包为用户管理了涉及到用户登录相关的缓存(Session)管理. Posted by Alima | cnblogs. 一.安装(Install) PC环境:Windows 7,Python 3.5.2. PS:此次配置环境阶