二、Celery基本命令和配置

1、在django的每一個APP中創建獨立的tasks模塊:
from celery import Celery

app=Celery("tasks", broker="redis://localhost")
@app.task
def add(x, y):
	return x+y
2、運行程序:celery -A tasks worker --loglevel=info
3、查看命令行參數列表:celery worker --help
celery help
4、用delay()方法調用任務:
from tasks import add
add.delay(1,2)
5、將redis同時作爲結果後端(發送狀態消息)和消息中間人:
app=Celery("tasks", backend="redis://localhost", broker="redis://localhost")
6、使用配置模塊,可以通過result_backend設置:
result_backend=“redis://:password@hostname:port/db_number”
7、配置好結果後端,再次調用任務,調用任務後返回AsyncResult實例。
result = add.delay(1, 2)
result.ready()	#查看任務是否完成處理
result.get(timeout=1)	#你可以等待任務完成,但這很少使用,因爲它把異步調用變成了同步調用
8、倘若任務拋出了一個異常, get() 會重新拋出異常, 但你可以指定 propagate 參數來覆蓋這一行爲:
result.get(propagate=False)
9、任務拋出異常時,獲取原始回溯信息:result.traceback
10、配置序列化荷載的默認序列化方式:app.conf.task_serializer="json"
11、用update一次性設置多個選項:
app.conf.update(
	task_serializer = 'json',
	accept_content = ['json'],
	result_serializer = 'json',
	timezone = 'Europe/Oslo',
	enable_utc = True,
)
12、celery實例加載配置模塊:app.config_from_object('celeryconfig')	#對應celeryconfig.py模塊,必須在統一路徑下
celeryconfig.py:

broker_url = 'redis://'
result_backend = 'redis://'

task_serializer = 'json'
result_serializer = 'json'
accept_content = ['json']
timezone = 'Europe/Oslo'
enable_utc = True
13、驗證配置文件是否正確:python -m celeryconfig
14、將“髒活”路由到專用隊列:task_routes = {'tasks.add':'low-proprity'}
15、對任務進行速率限制:task_annotations = {"tasks.add":{'rate_limit':'10/m'}}	#每分10個
16、在職程上設置:celery control rate_limit tasks.add 10/m
17、結果後端未奏效或處於pending(待處理)狀態的可能原因:

 - 啓用了ignore_result選項,強制職程跳過狀態更新。
 - 啓用了task_ignore_result設置
 - 確保沒有仍在運行的舊職程:–pidfile 參數可以設置爲一個絕對路徑來避免該狀況。
 - 確保客戶端配置了正確的結果後端
>>> result = task.delay(…)
>>> print(result.backend)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章