Multithreading 使用带flask的APScheduler运行计划任务(使用mod_wsgi)

Multithreading 使用带flask的APScheduler运行计划任务(使用mod_wsgi),multithreading,flask,mod-wsgi,background-process,Multithreading,Flask,Mod Wsgi,Background Process,我每天都会在特定的时间在后台发送一封电子邮件。当我添加作业时,应用程序挂起,我想我遇到了线程问题。配置如下所示 jobstores = { 'default': SQLAlchemyJobStore(url='path_to_my_db') } executors = { 'default': ThreadPoolExecutor(5), 'processpool': ProcessPoolExecutor(3) } job_default

我每天都会在特定的时间在后台发送一封电子邮件。当我添加作业时,应用程序挂起,我想我遇到了线程问题。配置如下所示

jobstores = {
    'default': SQLAlchemyJobStore(url='path_to_my_db')
        }
executors = {
    'default': ThreadPoolExecutor(5),
    'processpool': ProcessPoolExecutor(3)
        }
job_defaults = {
    'coalesce': False,
    'max_instances': 3
        }
scheduler = BackgroundScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults, timezone=utc)
scheduler.start()
那么我要增加我的工作了

def send_reports():
     msg = Message("Microphone testing 1, 2",
     recipients=["me@mycompany.com"])
     mail.send(msg)
scheduler.add_job(send_reports, 'cron', hour=8, minute=23)
如果我注释掉调度程序。添加作业,应用程序将正常运行

在虚拟主机中,我有行

WSGIDaemonProcess www.mycomapny.com processes=2 threads=5
WSGIScriptAlias / /var/www/html/myapp.wsgi

非常感谢您的帮助

我终于用APSchedular发送了电子邮件

我在Apache虚拟主机中允许多线程的设置(使用mod_wsgi)

然后在我的应用程序中,我首先导入后台后台调度程序

from apscheduler.schedulers.background import BackgroundScheduler
使用时区实例化我的计划程序,但使用所有其他默认配置

scheduler = BackgroundScheduler(timezone='Africa/Nairobi')
然后在第一个请求之前,我启动调度程序并添加send_reports作业

@app.before_first_request
def initialize():
    scheduler.start()
    scheduler.add_job(send_reports, 'cron', hour=10, minute=10, end_date='2055-05-30')
使用pdfkit和flask电子邮件将报告作为pdf附件发送是另一回事,但其要点是安装正确版本的wkhtmltopdf并具有正确的env路径,另外还要确保将应用程序上下文传递给flask mail,以便在后台线程中发送邮件

因此,它每天上午10点10分将报告发送到指定的电子邮件。希望有人觉得这有帮助

@app.before_first_request
def initialize():
    scheduler.start()
    scheduler.add_job(send_reports, 'cron', hour=10, minute=10, end_date='2055-05-30')