首页 > 解决方案 > 烧瓶加时间表

问题描述

嗨,我想将日程安排与我的 Flask 应用程序集成,因为我需要执行一些常规任务。我在这里发现他使用线程在后台运行它。但是,当我在我的身上尝试它时,我无法使用 Ctrl-C 退出我的应用程序,我使用的是 Windows。我很快会在 Heroku 上部署它,有什么问题?

还有没有更好的和“人性化”的时间表来为 Flask 做一些日常任务?谢谢。

这是我的代码:

from flask import Flask
from datetime import datetime
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import mysql.connector
from mysql.connector import Error
import schedule
import time
from threading import Thread


app = Flask(__name__)

def job():
    print("I'm working...")

def run_schedule():
    while True:
        schedule.run_pending()
        time.sleep(1)


@app.route('/')
def homepage():
    return '<h1>Hello World!</h1>'


if __name__ == '__main__':
    schedule.every(5).seconds.do(job)
    sched_thread = Thread(target=run_schedule)
    sched_thread.start()
    app.run(debug=True, use_reloader=False)

标签: pythonflaskpython-multithreadingschedule

解决方案


试试APScheduler。它支持后台调度程序。

这是我将烧瓶与 apscheduler 一起使用的示例代码。

from flask import Flask
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor

app = Flask(__name__)

executors = {
    'default': ThreadPoolExecutor(16),
    'processpool': ProcessPoolExecutor(4)
}

sched = BackgroundScheduler(timezone='Asia/Seoul', executors=executors)

def job():
    print('hi')

sched.add_job(job, 'interval', seconds=5)

if __name__ == '__main__':
    sched.start()
    app.run(debug=True, use_reloader=False)

推荐阅读