from celery import celery,platforms
#backend:訊息中介軟體型別,可無;broker:指定amqp broker(advanced message queue protocal,高階訊息佇列協議 訊息中介軟體)
platforms.c_force_root = true
#使用者解決root使用者無法啟動worker的問題
defadd
(x,y):
return x + y
在tasks.py同級目錄執行celery flower -a tasks –port=8083,啟動worker,繫結flower監控並設定監控埠;或者開兩個程序分別執行celery -a tasks worker -l info和celery -a tasks flower –port=8083,效果也一樣。
worker啟動後,另開程序進入task.py目錄,執行如下**,會在localhost:8083的監控頁面看到tasks執行結果。
>>>
from tasks import add
>>> add.delay(2,34)
61df6787-aa68-4c0a-8a9d-3a9ce52be4df>
>>>
參考文獻:
from celery import celery,platforms
platforms.c_force_root = true
defadd
(x,y):
return x + y
config.py**如下:
from __future__ import absolute_import #如果沒有這一行,下一行可能會出錯
from celery.schedules import crontab
from datetime import timedelta
broker_url = 'amqp:'
# crontab定時任務的設定方式
# celerybeat_schedule = ,
# }# periodic task的設定方式
celerybeat_schedule = ,
}celery_timezone = 'utc' #時區設定,也可以為'europe/london'
在指令碼同級目錄執行celery -a tasks worker -b,即啟動worker和beat服務;或者先用celery -a proj worker –loglevel=info啟動worker,再用celery -a tasks beat -s celerybeat-schedule#這裡的celerybeat-schedule指定乙個記錄檔案**啟動beat服務也行。
定時任務的執行**如下:
celery beat v3.1
.20 (cipater) is starting.
__ - ... __ - _
configuration ->
. broker -> amqp://public:**@192
.168
.12.103:5672//
. loader -> celery.loaders
. scheduler -> celery.beat
.persistentscheduler
. db -> celerybeat-schedule
. logfile -> [stderr]@%info
. maxinterval -> now (0s)
[2016-02-29
15:23:48,893: info/mainprocess] beat: starting...
[2016-02-29
15:24:00,001: info/mainprocess] scheduler: sending due task every-minute (tasks.add)
[2016-02-29
15:25:00,052: info/mainprocess] scheduler: sending due task every-minute (tasks.add)
[2016-02-29
15:26:00,051: info/mainprocess] scheduler: sending due task every-minute (tasks.add)
[2016-02-29
15:27:00,037: info/mainprocess] scheduler: sending due task every-minute (tasks.add)
在localhost:8083檢視tasks執行狀態與詳細日誌,如下:
crontab的引數設定如下,詳細見crontab引數設定
此外,如果上乙個task執行時間大於任務的時間間隔,則會造成任務重疊(overlap),如果要避免此現象,除了延長任務的時間間隔,還可以通過鎖實現
參考文獻:
Celery 分布式任務排程模組
celery基本模型 celery 參考中文文件連線 簡單實現 1 定義任務 定義celery物件,連線到redis 定義任務 def send sms to,datas,temp id pass或實現業務邏輯與worker共用 資料儲存 2 啟動 celery worker celery a ta...
python分布式任務排程Celery
celery是python開發的分布式任務排程模組,今天抽空看了一下,果然介面簡單,開發容易,5分鐘就寫出了乙個非同步傳送郵件的服務。celery本身不含訊息服務,它使用第三方訊息服務來傳遞任務,目前,celery支援的訊息服務有rabbitmq redis甚至是資料庫,當然redis應該是最佳選擇...
Celery任務佇列
使用任務佇列作為分發任務的機制。乙個任務佇列的輸入是一組被稱為任務的工作單元。專用的工人會持續監聽任務佇列來等待完成新的工作。celery通過訊息進行通訊,通常使用中間人作為客戶端和工人 workers 間的媒介。為了初始化一項任務,客戶端會新增一條訊息到佇列中,然後中間人傳遞這條訊息給乙個work...