Celery 定時任務

2022-03-05 12:12:53 字數 2556 閱讀 6963

celery beat是乙個排程程式,它定期啟動任務,然後由集群中的可用工作程式節點執行任務。

預設情況下,條目是從

beat_schedule

設定中獲取的

,但也可以使用自定義儲存,例如將條目儲存在sql資料庫中。

必須確保一次只有乙個排程程式針對乙個排程任務執行,否則最終將導致重複的任務。

使用集中式方法意味著時間表不必同步,並且服務可以在不使用鎖的情況下執行。

要定期呼叫任務,您必須在beat時間表列表中新增乙個條目

tasks.py

from celery import

celery

from celery.schedules import crontab

tasks

', broker='

pyamqp:

',backend='

redis://localhost:6379/0')

# task_serializer='

json',

accept_content=['

json

'], #

ignore other content

result_serializer='

json',

timezone='

asia/shanghai',

enable_utc=true,

)def setup_periodic_tasks(sender, **kwargs):

#calls test('hello') every 10 seconds.

sender.add_periodic_task(10.0, test.s('

hello

'), name='

add every 10')

#calls add(2,2) every 30 seconds

sender.add_periodic_task(30.0, add.s(2,2), expires=10)

#executes every monday morning at 7:30 a.m.

sender.add_periodic_task(

crontab(hour=7, minute=30, day_of_week=1),

test.s(''

), )

deftest(arg):

print

(arg)

defadd(x, y):

return x + y

beat需要將任務的最後執行時間儲存在本地資料庫檔案(

預設情況下

命名為celerybeat-schedule

)中,因此它需要訪問許可權才能在當前目錄中進行寫操作,或者可以為此檔案指定乙個自定義位置:

celery -a tasks beat -s /var/run/celery/celerybeat-schedule

然後在另乙個終端啟用worker 

celery -a tasks worker -l info

可以看見日誌:

[2019-10-24 14:45:53,448: info/forkpoolworker-4] task tasks.add[e028900c-f2a3-468e-8cb8-4ae72d0e77fe] succeeded in 0.0020012762397527695s: 4

[2019-10-24 14:46:03,370: info/mainprocess] received task: tasks.test[0635b276-19c9-4d76-9941-dbe9e7320a7f]

[2019-10-24 14:46:03,372: warning/forkpoolworker-6] hello

[2019-10-24 14:46:03,374: info/forkpoolworker-6] task tasks.test[0635b276-19c9-4d76-9941-dbe9e7320a7f] succeeded in 0.0021341098472476006s: none

[2019-10-24 14:46:13,371: info/mainprocess] received task: tasks.test[afcfa84c-3a3b-48bf-9191-59ea55b08eea]

[2019-10-24 14:46:13,373: warning/forkpoolworker-8] hello

[2019-10-24 14:46:13,375: info/forkpoolworker-8] task tasks.test[afcfa84c-3a3b-48bf-9191-59ea55b08eea] succeeded in 0.002273786813020706s: none

也可以通過啟用workers  -b選項將

beat

嵌入到worker中,

如果永遠不會執行乙個以上的worker節點,這很方便,但是它並不常用,因此不建議用於生產環境:

celery -a tasks worker -b -l info

Celery 定時任務

project celery task celery包 init py 包檔案 celery.py celery連線和配置相關檔案,且名字必須交celery.py tasks.py 任務體函式檔案 注意 任務體 檔案要與celery.py檔案在同乙個包下 beat也是乙個socket,啟動後會根據配...

celery定時任務

預先在django中配置好celery,接下來著手配置下定時任務。時區修改為本地時區 在setttings.py 新增以下任意一行 celery timezone asia shanghai 如果使用了django celery beat持久化到資料庫,那麼需要手動執行更新命令 python man...

celery 執行celery定時任務

場景 在虛擬機器上執行 python django celery redis 的定時任務 可能遇到的問題 如果在執行過程中,定時任務突然退出,並報以下錯誤,錯誤顯示,沒有許可權訪問一些目錄檔案 解決方案 1 關閉當前redis服務 在step 3中有描述如何關閉 2 以root使用者執行啟動redi...