【问题标题】:Flask plus Schedule烧瓶加时间表
【发布时间】:2019-02-02 23:12:21
【问题描述】:

您好,我想将schedule 与我的 Flask 应用程序集成,因为我需要执行一些日常任务。我发现here 他使用线程在后台运行它。但是,当我在我的身上尝试它时,我无法使用 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)

【问题讨论】:

    标签: python flask python-multithreading schedule


    【解决方案1】:

    试试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)
    

    【讨论】:

    • 我应该只使用 .add_job 来拥有 2 个工作吗?谢谢!
    • 我也试过了,我的烧瓶应用程序运行良好。但是添加的功能只运行一次!在设定的时间间隔后它没有再次运行。有人可以解释可能的错误吗?
    猜你喜欢
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 2020-11-09
    • 2022-01-24
    • 2021-05-17
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    相关资源
    最近更新 更多