代码之家  ›  专栏  ›  技术社区  ›  Nikko

烧瓶加附表

  •  0
  • Nikko  · 技术社区  · 6 年前

    嗨,我想整合一下 schedule 因为我需要做一些常规的任务,所以我的flask应用程序。我找到了它 here 他用线程在后台运行它。但是,当我在我的应用程序上尝试它时,我不能使用ctrl-c退出我的应用程序,我使用的是Windows。我很快就会把它部署到Heroku上,怎么了?

    还有没有更好的“人性化”的时间表来为烧瓶做一些日常工作?谢谢。

    这是我的代码:

    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)
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   YB Yu    6 年前

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