Celery任務排程示例

2021-07-10 05:13:16 字數 2905 閱讀 6805

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 infocelery -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...