簡體   English   中英

芹菜和Redis后端的問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM