[英]Problems with Celery & Redis Backend
我目前正在設置一個系統,它使用帶有redis后端的芹菜來執行一系列異步任務,例如發送電子郵件,提取社交數據,抓取等等。 一切都很好,但我正在尋找如何監控系統(也就是排隊消息的數量)。 我開始瀏覽芹菜來源,但我想我會在這里發布我的問題:首先,這是我的配置:
BROKER_BACKEND = "redis"
BROKER_HOST = "localhost"
BROKER_PORT = 6379
BROKER_VHOST = "1"
REDIS_CONNECT_RETRY = True
REDIS_HOST = "localhost"
REDIS_PORT = 6379
REDIS_DB = "0"
CELERY_SEND_EVENTS = True
CELERYD_LOG_LEVEL = 'INFO'
CELERY_RESULT_BACKEND = "redis"
CELERY_TASK_RESULT_EXPIRES = 25
CELERYD_CONCURRENCY = 8
CELERYD_MAX_TASKS_PER_CHILD = 10
CELERY_ALWAYS_EAGER =True
我要做的第一件事是監視隊列中有多少消息。 我假設,在幕后,redis后端只是從列表中推送/彈出,雖然我似乎無法在代碼中找到它。 所以我模擬了一個模擬,我開始執行大約100個任務,並嘗試在redis中找到它們:我的celeryd運行如下:python manage.py celeryd -c 4 --loglevel = DEBUG -n XXXXX --logfile = logs / celery.log所以我應該一次只有4個並發工作者......我不明白的兩件事:問題1:排隊完成100個任務后,在redis上查找它們,我只看到以下內容:
$ redis-cli
redis 127.0.0.1:6379> keys *
1) "_kombu.binding.celery"
redis 127.0.0.1:6379> select 1
OK
redis 127.0.0.1:6379[1]> keys *
1) "_kombu.binding.celery"
2) "_kombu.binding.celeryd.pidbox"
redis 127.0.0.1:6379[1]>
我似乎無法找到任務來獲取多少排隊的數量(技術上,96應該是因為我只支持4個並發任務)
問題2
$ ps aux | grep celeryd | cut -c 13-120
41258 0.2 0.2 2526232 9440 s004 S+ 2:27PM 0:07.35 python
manage.py celeryd -c 4 --loglevel=DEBU
41261 0.0 0.1 2458320 2468 s004 S+ 2:27PM 0:00.09 python
manage.py celeryd -c 4 --loglevel=DEBU
38457 0.0 0.8 2559848 34672 s004 T 12:34PM 0:18.59 python
manage.py celeryd -c 4 --loglevel=INFO
38449 0.0 0.9 2517244 36752 s004 T 12:34PM 0:35.72 python
manage.py celeryd -c 4 --loglevel=INFO
38443 0.0 0.2 2524136 6456 s004 T 12:34PM 0:10.15 python
manage.py celeryd -c 4 --loglevel=INFO
84542 0.0 0.0 2460112 4 s000 T 27Jan12 0:00.74 python
manage.py celeryd -c 4 --loglevel=INFO
84536 0.0 0.0 2506728 4 s000 T 27Jan12 0:00.51 python
manage.py celeryd -c 4 --loglevel=INFO
41485 0.0 0.0 2435120 564 s000 S+ 2:54PM 0:00.00 grep
celeryd
41264 0.0 0.1 2458320 2480 s004 S+ 2:27PM 0:00.09 python
manage.py celeryd -c 4 --loglevel=DEBU
41263 0.0 0.1 2458320 2480 s004 S+ 2:27PM 0:00.09 python
manage.py celeryd -c 4 --loglevel=DEBU
41262 0.0 0.1 2458320 2480 s004 S+ 2:27PM 0:00.09 python
manage.py celeryd -c 4 --loglevel=DEBU
如果有人能為我解釋這個,那就太好了。
您的配置具有CELERY_ALWAYS_EAGER = True
。 這意味着任務在本地運行,因此您不會在Redis中看到它們。 來自文檔: http : //celery.readthedocs.org/en/latest/configuration.html#celery-always-eager
CELERY_ALWAYS_EAGER
如果這是True,則所有任務將通過阻塞在本地執行,直到任務返回。 apply_async()和Task.delay()將返回一個EagerResult實例,該實例模擬AsyncResult的API和行為,但結果已經過評估。
也就是說,任務將在本地執行,而不是發送到隊列。
從未使用過Celery但是如果你想知道它在做什么,其中一個方法是使用redis-cli連接到Redis實例然后運行monitor
命令。 這將轉儲針對Redis數據庫執行的所有命令。 您將能夠確切地看到發生了什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.