專案結構
/proj
-__init__
-celeryconfig.py #celery的配置檔案
-tasks.py #celery編寫任務檔案
#coding:utf-8
from __future__ import absolute_import
from celery import celery
'proj'
, include=
['proj.tasks'])
#例項化celery物件
'proj.celeryconfig'
)#引入配置檔案
if __name__ ==
'__main__'
:
)
tasks.py
'''
'''#coding:utf-8
from __future__ import absolute_import
)def
add(x, y)
:return x + y
celeryconfig.py
#coding:utf-8
from kombu import queue
broker_url =
'amqp:'
# 使用rabbitmq作為訊息**
celery_result_backend =
'redis:'
# 把任務結果存在了redis
celery_task_serializer =
'msgpack'
# 任務序列化和反序列化使用msgpack方案
celery_result_serializer =
'json'
# 讀取任務結果一般效能要求不高,所以使用了可讀性更好的json
celery_task_result_expires =60*
60*24# 任務過期時間,不建議直接寫86400,應該讓這樣的magic數字表述更明顯
celery_accept_content =
['json'
,'msgpack'
]# 指定接受的內容型別
celery_queues =
(#設定add佇列,繫結routing_key
queue(
'add'
, routing_key=
'xue.add'),
)celery_routes =
}
啟動
在proj的上層目錄輸入
發布任務
from proj.tasks import add
add.delay(2,
3)
多佇列中需要修改的地方
celery_queues =
(#設定add佇列,繫結routing_key
queue(
'add'
, routing_key=
'xue.add'),
)celery_routes =
配置兩個佇列
'''
'''# 配置佇列
celery_queues =
( queue(
'default'
, routing_key=
'default'),
queue(
'佇列1'
, routing_key=
'key1'),
queue(
'佇列2'
, routing_key=
'key2'),
)# 路由(哪個任務放入哪個佇列)
celery_routes =
,'任務2':,
}
celery使用多佇列
usr bin env python3 coding utf 8 from celery import celery import settings pw settings.session redis password celery broker redis s localhost 6379 0 p...
celery清空佇列
本人在使用python celery佇列時,有時候需要清空佇列,但是python celery似乎並沒有清空佇列的api 至少我沒找到 所以使用redis cli工具進行佇列清空 使用redis cli工具,命令如下,在終端直接輸入 redis cli n 15 ltrim transcode 0 ...
Celery任務佇列
使用任務佇列作為分發任務的機制。乙個任務佇列的輸入是一組被稱為任務的工作單元。專用的工人會持續監聽任務佇列來等待完成新的工作。celery通過訊息進行通訊,通常使用中間人作為客戶端和工人 workers 間的媒介。為了初始化一項任務,客戶端會新增一條訊息到佇列中,然後中間人傳遞這條訊息給乙個work...