celery非同步,延時任務, 週期任務

2022-03-26 06:28:22 字數 3064 閱讀 8404

celery中文譯為芹菜,是乙個分布式任務佇列. 是非同步的,所以能處理大量訊息

最新的celery不支援windows下使用了,所以在使用pycharm安裝celery模組之後,需要再安裝eventlet模組才能測試執行.

啟動客戶端:

s1,s2要在專案目錄下,如果在資料夾中執行,terminal輸入命令的時候要-a 專案資料夾的名字

c=celery("

task

",broker="

redis:

",backend="

redis:

", include="專案名.資料夾")

terminal中輸入

celery worker -a s1 -l info -p eventlet

給定兩個檔案

s1.py

from celery import

celery

import

time

c=celery("

task

",broker="

redis:

",backend="

redis:")

@c.task

defmyfun1(a,b):

return f"

myfun1

"@c.task

defmyfun2():

return

"myfun2

"@c.task

defmyfun3():

return

"myfun3

"celery worker -a s1 -l info -p eventlet

s2.py

from s1 import

myfun1,myfun2,myfun3,c

from celery.result import

asyncresult

#多個生產者

#for i in range(10):

#s=myfun1.delay()

#print(s)

s=myfun1.delay(10,20)

print

(s.id)

#獲取狀態

#print(r.status)

#print(r.successful())

#獲取值

#print(r.get())

#只獲取報錯資訊

print(r.get(propagate=false))

#獲取具體出錯的位置

#print(r.traceback)

表示延遲5秒鐘執行任務

print

(t)print(t.get())

支援的引數

countdown : 等待一段時間再執行.

max_retries : 最大重試次數, 預設為 3次.

interval_start : 重試等待的時間間隔秒數, 預設為 0 , 表示直接重試不等待.

interval_step : 每次重試讓重試間隔增加的秒數, 可以是數字或浮點數, 預設為 0.2interval_max : 重試間隔最大的秒數, 即 通過 interval_step 增大到多少秒之後, 就不在增加了, 可以是數字或者浮點數, 預設為 0.2 .

s1.py

from celery import

celery

import

time

c=celery("

task

",broker="

redis:

",backend="

redis:")

@c.task

defmyfun1(a,b):

return f"

myfun1

"@c.task

defmyfun2():

return

"myfun2

"@c.task

defmyfun3():

return

"myfun3

"

s2.py

from s1 import

myfun1,myfun2,myfun3,c

from celery.result import

asyncresult

from datetime import

timedelta

#指定多長時間以後執行##

第二種方式,使用utc時間

utc時間")

print

(s.id)#延時

#重試

啟動: 在terminal中

celery beat -a s2 -l info

s1.py

from celery import

celery

import

time

c=celery("

task

",broker="

redis:

",backend="

redis:")

@c.task

defmyfun1(a,b):

return f"

myfun1

"@c.task

defmyfun2():

return

"myfun2

"@c.task

defmyfun3():

return

"myfun3

"

s2.py

from s1 import

cfrom celery.beat import

crontab

c.conf.beat_schedule =,

"crontab":

}

配置詳解:

from celery.schedules import

crontab

celerybeat_schedule =,

}

Django 非同步任務 定時任務Celery

將任務分配給其他的程序去執行,django的主程序只負責發起任務,而執行任務的不在使用 django 的主程序。python 有乙個很棒的非同步任務框架,叫做 celery django為了讓開發者開發更加方便,整合了 celery,形成了django celery 外掛程式1.安裝django c...

celery的非同步任務與定時任務

在django web平台開發中,碰到一些請求執行的任務時間較長 幾分鐘 為了加快使用者的響應時間,因此決定採用非同步任務的方式在後台執行這些任務。與此同時,celery除了非同步任務,還可以開啟定時任務,方便排程。2 安裝需要的軟體包 按照順序安裝 pip install celery pip i...

使用celery執行非同步定時任務

建立乙個名叫tasks.py的檔案,裡邊單獨存放定時任務函式 from datetime import timedelta from django.utils import timezone from polls.models import user defcheck inactive user 檢...