python - 烧瓶加时间表
问题描述
嗨,我想将日程安排与我的 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)
解决方案
试试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)
推荐阅读
- angular - API fetch 中的模板文字不会在 Angular 中传递数据
- python - 如何使用python将元素附加到for循环中的空列表?
- ios - iOS - 更新 CFBundleURLName 和 CFBundleURLSchemes
- windows - 如何在 UWP 应用程序中创建应用程序范围的键盘快捷键,以取代子 XAML 元素具有的任何按键处理程序?
- c# - 我可以使用 WrapPanel 来组织 ListView 组标题吗?
- javascript - 如何在 Wild Web Developer 中关闭提示
- android-studio - 当我在 feature_branch 中有很多提交时,如何解决与 android studio 中的开发分支的 rebase 冲突?
- git - gitignore 和 gitattributes 优先级
- html - 如何放置工具提示文本以使其在隐藏时不占用空间?
- excel - 在打开数据验证时在 Excel 中手动编辑单元格内容