celery初級教程 七

2021-08-08 13:31:22 字數 3785 閱讀 2579

我們如何使用celery執行一些週期性任務呢?

celery beat是乙個排程器,它可以週期內指定某個worker來執行某個任務。如果我們想週期執行某個任務需要增加beat_schedule配置資訊. 

celeryconfig.py配置資訊如下:

roker_url = 'redis:'

celery_result_backend = 'redis:'

celerybeat_schedule =

}celery_routes = (,

'proj.tasks.upload_file': ,

'proj.tasks.image_process': ,

},# route_for_task,

)

celerybeat_schedule配置每隔5秒執行一次period_task任務, 'every-5-minute'為任務名稱,可自定義。task指定週期執行的任務函式,schedule指定多久執行一次task任務, args為傳遞給任務函式的引數。

tasks.py模組內容如下:

import time

# 建立任務函式

def send_email():

print("正在傳送email....")

time.sleep(5)

print("email傳送完畢!")

def upload_file():

print("正在處理檔案上傳任務....")

time.sleep(3)

print("檔案上傳完畢!")

def image_process():

print("正在處理影象....")

time.sleep(5)

print("影象處理完畢!")

def period_task(a, b):

print("開始週期性任務...")

time.sleep(3)

print("週期性任務執行完畢:%d!" % (a + b))

啟動woker處理週期性任務:

celery -a proj worker --loglevel=info --beat
在命令後面加上--beat,表示啟動週期性任務。

如果我們想指定在某天某時某分某秒執行某個任務,可以執行cron任務, 增加配置資訊如下:

celerybeat_schedule = ,

'add-every-monday-morning': ,

}

crontab編寫的例子:

例子含義

crontab()

每分鐘執行

crontab(minute=0,

hour=0)

execute daily at midnight.

crontab(minute=0,

hour='*/3')

execute every three hours: midnight, 3am, 6am, 9am, noon, 3pm, 6pm, 9pm.

crontab(minute=0,hour='0,3,6,9,12,15,18,21')

same as previous.

crontab(minute='*/15')

execute every 15 minutes.

crontab(day_of_week='sunday')

execute every minute (!) at sundays.

crontab(minute='*',hour='*',day_of_week='sun')

same as previous.

crontab(minute='*/10',hour='3,17,22',day_of_week='thu,fri')

execute every ten minutes, but only between 3-4 am, 5-6 pm, and 10-11 pm on thursdays or fridays.

crontab(minute=0,

hour='*/2,*/3')

execute every even hour, and every hour divisible by three. this means: at every hour except: 1am, 5am, 7am, 11am, 1pm, 5pm, 7pm, 11pm

crontab(minute=0,

hour='*/5')

execute hour divisible by 5. this means that it is triggered at 3pm, not 5pm (since 3pm equals the 24-hour clock value of 「15」, which is divisible by 5).

crontab(minute=0,

hour='*/3,8-17')

execute every hour divisible by 3, and every hour during office hours (8am-5pm).

crontab(0,

0,day_of_month='2')

execute on the second day of every month.

crontab(0,

0,day_of_month='2-30/3')

execute on every even numbered day.

crontab(0,

0,day_of_month='1-7,15-21')

execute on the first and third weeks of the month.

crontab(0,

0,day_of_month='11',month_of_year='5')

execute on the eleventh of may every year.

crontab(0,

0,month_of_year='*/3')

execute on the first month of every quarter.

開啟乙個celery beat服務:

celery -a proj beat
celery需要儲存上次任務執行的時間在資料檔案中,檔案在當前目錄下名字叫celerybeat-schedule. beat需要訪問此檔案:
celery -a proj beat -s /home/celery/var/run/celerybeat-schedule

celery初級教程 二

celery使用簡單,配置也非常簡單。celery有很多配置選項能夠使得celery能夠符合我們的需要,但是預設的幾項配置已經足夠應付大多數應用場景了。from celery import celery 增加配置 result backend redis broker url redis 配置模組的...

HLSL初級教程

hlsl 初級教程 trcj 目錄 前言1.hlsl 入門1.1 什麼是著色器 1.2什麼是 hlsl 1.3怎麼寫hlsl 著色器1.4 怎麼用hlsl 著色器2.頂點著色器 2.1可程式設計資料流模型 2.2頂點宣告 2.3用頂點著色器實現漸變動畫 3.畫素著色器 3.1多紋理化 3.2多紋理效...

SubVersion初級教程

don t tell me why,just tell me how.1 找個rpm或者bin或者tar之類的安裝包,把subvesion安裝好。裝好之後client server admin都在你機器上了。2 首先在你中意的目錄,比如根目錄 下,執行 svnadmin create svnroot...