Celery Task(定時任務)及參數


celery beat 是一個調度器;它以常規的時間間隔開啟任務,任務將會在集群中的可用節點上運行。

默認情況下,入口項是從 beat_schedule 設置中獲取,但是自定義的存儲也可以使用,例如在 SQL 數據庫中存儲入口項。

你必須保證一個調度一次只被一個調度器運行,否則將會形成重復任務。使用中央集權的方式意味着調度不需要被同步,並且服務可以在沒有鎖的情況下操作。

 

 

  • task
    要執行的任務的名稱

  • schedule
    執行的頻率。

  這可以是一個表示秒數的整數,一個 timedelta 或者一個 crontab。你還可以定義自己的調度器類型,只要擴展schedule接口。

  • args
    位置參數(list 或者 tuple)

  • kwargs
    關鍵字參數(dict)

  • options
    執行選項(dict)
    這可以是 apply_async() 支持的任何參數 exchange, routing_key,expires 等等。

  • relative
    如果 relative 設置成真(True), timedelta調度器依據時鍾調度。這意味着頻率將根據timedleta的周期四舍五入到最近的秒,分,小時或者天。

默認情況下,relative值為假(False),頻率沒有四舍五入,而是相對於 celery beat 啟動的時間。

 

Crontab 表達式的語法非常靈活。

一些示例:

Example Meaning
crontab() 每分鍾執行
crontab(minute=0, hour=0) 每天凌晨執行
crontab(minute=0, hour=’*/3’) 每三個小時執行: midnight, 3am, 6am, 9am, noon, 3pm, 6pm, 9pm.
crontab(minute=0,hour=’0,3,6,9,12,15,18,21’) 同上
crontab(minute=’*/15’) 每十五分鍾執行
crontab(day_of_week=’sunday’) 星期天每分鍾執行
crontab(minute=’‘,hour=’‘, day_of_week=’sun’) 同上
crontab(minute=’*/10’,hour=’3,17,22’, day_of_week=’thu,fri’) 每十分鍾執行, 但是只在星期四、五的 3-4 am, 5-6 pm, and 10-11 pm
crontab(minute=0, hour=’/2,/3’) 每兩個小時及每三個小時執行,意思是: 除了下面時間的每個小時: 1am, 5am, 7am, 11am, 1pm, 5pm, 7pm, 11pm
crontab(minute=0, hour=’*/5’) 每五個小時執行。這意味着將在 3pm 而不是 5pm 執行 (因為 3pm 等於 24 小時制的 15, 能被 5 整除)
crontab(minute=0, hour=’*/3,8-17’) 每三個小時, 以及 (8am-5pm) 之間的小時執行
crontab(0, 0, day_of_month=’2’) 每個月的第二天執行
crontab(0, 0, day_of_month=’2-30/3’) 每個月的偶數天執行
crontab(0, 0,day_of_month=’1-7,15-21’) 每個月的第一個和第三個星期執行
crontab(0, 0, day_of_month=’11’,month_of_year=’5’) 每年五月份的第十一天執行
crontab(0, 0,month_of_year=’*/3’) 每個季度的第一個月執行

查看 celery.schedules.crontab 這一節獲取更多的信息。

 

 

 

請確保為經度和緯度使用正確的符號:

Sign Argument Meaning
+ latitude North
- latitude South
+ longtitude East
- longtitude West

可能的事件類型有:

Event Meaning
dawn_astronomical 天不完全黑的時候執行。 太陽在地平線下18度
dawn_nautical 地平線有充足的陽光並且可以看清一些事物; 形式化一點, 太陽在地平線下12度
dawn_civil 有充足的陽光可以看清事物並且可以開始戶外活動; 形式化一點, 太陽在地平線下6度
sunrise 太陽的上邊緣出現在東方地平線上時執行
solar_noon 一天中太陽距離地平線最高的位置時執行
sunset 傍晚太陽的上邊緣消失在西方地平線上時執行
dusk_civil 黃昏的盡頭, 事物仍然可見並且可以看到一些星星。形式化一點, 太陽在地平線下6度
dusk_nautical 形式化一點, 太陽在地平線下12度。事物已經看不清,並且地平線也看不清了
dusk_astronomical 天完全黑時執行; 形式化一點, 太陽在地平線下18度

所有 solar 事件都使用 UTC 時間計算,因此不受你的 timezone 設置影響。

在極地區域,太陽可能不會每天都升起。這個調度器可以處理這種情況(即:當太陽沒有升起,sunrise 事件不會觸發)。只有 solar_noon 事件除外,這個事件是由太陽經過地球兩極縱分地球的圓環的時刻定義的,即使太陽在地平線下它也會天天觸發。

Twilight 定義為黎明到日出這段時間;以及日落到黃昏這段時間。依據你對 twilight 的定義(民用的、航海的或天文的),使用上述列表中的合適事件,你可以為你定義的twilight 觸發一個事件,並且可以指定讓事件在 twilight 開始還是結束的時刻觸發。

查看 celery.schedules.solar 獲取更多的信息。

 

啟動 celery beat 服務:

$ celery -A proj beat

 

你可以通過使能工作單元的 -B 選項將 beat 嵌入到你的工作單元中,如果你不會啟動多於一個工作單元,那么這是很便利的,但是這並不常用,並且也不推薦在生產環境使用:

$ celery -A proj worker -B

 

Beat 需要在一個本地數據庫文件(默認是 celerybeat-schedule文件 )中保存任務的最后執行時間,所以需要有當前目錄的寫權限,或者你也可以為這個文件制定一個自定義的路徑:

$ celery -A proj beat -/home/celery/var/run/celerybeat-schedule

 

 

Django

下載

$ pip install django-celery-beat

 setting.py 中將 django_celery_beat 添加到 INSTALL_APPS 中 

 

INSTALLED_APPS = (

     ...,
     'django_celery_beat' ,
)
遷移
python manage.py migrate
 
 
使用  django_celery_beat.schedulers:DatabaseScheduler 調度器:
 
$ celery  - A proj beat  - l info  - - scheduler django_celery_beat.schedulers:DatabaseScheduler


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM