2014-01-19 74 views

回答

33

要更新肖恩·維埃拉的answer:由於Scheduler()在APScheduler V3.0刪除,我們現在可以(V3.2)使用BackgroundScheduler()

import time 
import atexit 

from apscheduler.schedulers.background import BackgroundScheduler 
from apscheduler.triggers.interval import IntervalTrigger 

scheduler = BackgroundScheduler() 
scheduler.start() 
scheduler.add_job(
    func=print_date_time, 
    trigger=IntervalTrigger(seconds=5), 
    id='printing_job', 
    name='Print date and time every five seconds', 
    replace_existing=True) 
# Shut down the scheduler when exiting the app 
atexit.register(lambda: scheduler.shutdown()) 

def print_date_time(): 
    print time.strftime("%A, %d. %B %Y %I:%M:%S %p") 

注意,其中兩個調度程序將被啓動時,燒瓶在調試模式下。有關更多信息,請查看this問題。

+3

更爲容易的是['schedule'(https://開頭的PyPI 。python.org/pypi/schedule)。 – 2016-07-21 10:18:13

+0

忘記標記爲回答當時的問題,現在標記爲最新的一個。 – RomaValcer

+0

@ user5547025計劃如何工作假設我已經將內容放入schedule.py中,它將如何自動運行? – Kishan

31

你可以利用APScheduler在瓶的應用程序,並通過它的界面運行作業:

import atexit 

from apscheduler.scheduler import Scheduler 
from flask import Flask 

app = Flask(__name__) 

cron = Scheduler(daemon=True) 
# Explicitly kick off the background thread 
cron.start() 

@cron.interval_schedule(hours=1) 
def job_function(): 
    # Do your work here 


# Shutdown your cron thread if the web process is stopped 
atexit.register(lambda: cron.shutdown(wait=False)) 

if __name__ == '__main__': 
    app.run() 
0

您可能希望使用與調度一些隊列機制像RQ scheduler或一些更重的像芹菜(最有可能一個矯枉過正)。

2

您可以嘗試使用APScheduler's BackgroundScheduler將間隔作業集成到Flask應用程序中。下面是使用藍圖和應用工廠(INIT的.py)的例子:

from datetime import datetime 

# import BackgroundScheduler 
from apscheduler.schedulers.background import BackgroundScheduler 
from flask import Flask 

from webapp.models.main import db 
from webapp.controllers.main import main_blueprint  

# define the job 
def hello_job(): 
    print('Hello Job! The time is: %s' % datetime.now()) 

def create_app(object_name): 
    app = Flask(__name__) 
    app.config.from_object(object_name) 
    db.init_app(app) 
    app.register_blueprint(main_blueprint) 
    # init BackgroundScheduler job 
    scheduler = BackgroundScheduler() 
    # in your case you could change seconds to hours 
    scheduler.add_job(hello_job, trigger='interval', seconds=3) 
    scheduler.start() 

    try: 
     # To keep the main thread alive 
     return app 
    except: 
     # shutdown if app occurs except 
     scheduler.shutdown() 

希望它能幫助:)

編號:

  1. https://github.com/agronholm/apscheduler/blob/master/examples/schedulers/background.py
2

我在應用程序調度程序的概念上有點新,但是我在這裏發現的APScheduler v3.3.1,有點不同。我認爲,最新的版本中,封裝結構,類名稱等,都變了,所以我把這裏我最近做了一個新的解決方案,集成了基本的應用瓶:

#!/usr/bin/python3 
""" Demonstrating Flask, using APScheduler. """ 

from apscheduler.schedulers.background import BackgroundScheduler 
from flask import Flask 

def sensor(): 
    """ Function for test purposes. """ 
    print("Scheduler is alive!") 

sched = BackgroundScheduler(daemon=True) 
sched.add_job(sensor,'interval',minutes=60) 
sched.start() 

app = Flask(__name__) 

@app.route("/home") 
def home(): 
    """ Function for test purposes. """ 
    return "Welcome Home :) !" 

if __name__ == "__main__": 
    app.run() 

我如果有人對這個例子的更新感興趣,也可以離開這個Gist here

這裏有一定的參考,爲未來的讀數:

相關問題