celery beat是乙個排程程式,它定期啟動任務,然後由集群中的可用工作程式節點執行任務。
預設情況下,條目是從
beat_schedule
設定中獲取的
,但也可以使用自定義儲存,例如將條目儲存在sql資料庫中。
必須確保一次只有乙個排程程式針對乙個排程任務執行,否則最終將導致重複的任務。
使用集中式方法意味著時間表不必同步,並且服務可以在不使用鎖的情況下執行。
要定期呼叫任務,您必須在beat時間表列表中新增乙個條目
tasks.py
from celery importcelery
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):
(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...