我有一個Flask虛擬主機,無法訪問cron
命令。 如何每小時執行一次Python函數?安排在Flask上每小時運行一個函數
34
A
回答
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問題。
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或一些更重的像芹菜(最有可能一個矯枉過正)。
4
另一種方法是使用燒瓶APScheduler與瓶很好的發揮,如:
- 負載從瓶配置調度配置,
- 負荷作業定義從瓶配置
更多information here:
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()
希望它能幫助:)
編號:
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。
這裏有一定的參考,爲未來的讀數:
相關問題
- 1. 安排一個windows服務每兩小時運行一次
- 2. 安排一個cronjob運行,每2個1/2小時
- 3. 安排任務,每1小時運行
- 4. 每小時運行一次java函數
- 5. 如何安排一個cron作業每一小時運行一次?
- 6. 你如何安排一個TFS 2008版本每小時運行一次?
- 7. 安排一個函數在Excel加載項中運行
- 8. 我每24小時使用一次javascript函數運行一次?
- 9. 在每一頁上運行一個函數
- 10. 如何在codeigniter的每個頁面上運行一個函數
- 11. 如何安排一個Java程序每天在Windows中運行?
- 12. 每天安排一次php函數
- 13. Django - 每x秒運行一個函數
- 14. 克朗觸發器每小時運行一小時一小時
- 15. 安排每天在每分鐘運行一次的PgAgent作業
- 16. 每次運行時在函數中清除一個列表
- 17. 在每分鐘開始時運行一個函數?
- 18. 我該如何安排一項任務在我的Tomcat服務器上每X小時運行一次?
- 19. 在關機時運行一個函數
- 20. 如何在每次運行一個函數時增加一個數字?
- 21. 是否可以安排一個自動任務在特定終端中每小時運行一次?
- 22. 使AS3函數在時間軸上的每一處運行?每60秒
- 23. 計劃在每個小時運行一個宏
- 24. 每6小時在linux上運行一次cron作業
- 25. 在頁面上的每個元素上運行函數
- 26. 如何安排C#Windows服務每天運行一個方法?
- 27. 每12小時運行一次javascript
- 28. 每小時運行一次aspx文件
- 29. 如何安排上個星期六每月在cron上運行的工作?
- 30. 每次在CodeIgniter中加載一個頁面時運行一個函數
更爲容易的是['schedule'(https://開頭的PyPI 。python.org/pypi/schedule)。 – 2016-07-21 10:18:13
忘記標記爲回答當時的問題,現在標記爲最新的一個。 – RomaValcer
@ user5547025計劃如何工作假設我已經將內容放入schedule.py中,它將如何自動運行? – Kishan