1. 報錯信息
def _connparams(self, async=False, _r210_options=( ^ SyntaxError: invalid syntax
原因: async 在 python3.7已經是關鍵字了,但是celery4.4.6版本沒有更新導致的。此問題將在下一個版本修復。
解決辦法:1. 將celery文件中的async命名為其他變量名/ 或者降低python版本3.7之下的
2. 在python3.8版本之后,python 中的kombu中的async 已經改變名稱了
2.
from kombu.async.timer import Entry, Timer as Schedule, to_timestamp, logger ^ SyntaxError: invalid synta
同上
3. 啟動worker 后執行task報錯
tasks, accept, hostname = _loc ValueError: not enough values to unpack (expected 3, got 0)
解決辦法:在win10環境下運行celery4.x會出現此問題。先通過pip install eventlet
安裝eventlet,然后啟動worker時添加一個參數:
celery worker <module> worker -l INFO -P eventlet
4. 使用redis作為borker時
ERROR/MainProcess] Unrecoverable error: AttributeError("'str' object has no attribute 'items'",)-bug
原因: redis版本過高當時redis版本是3.5.3
解決辦法:降低redis版本到2.10.6
5. celery定時任務,在運行生產者和工作者后,定時任務不執行,不報錯,看不到任何情況。
原因: 運行命令
celery -A 任務文件名稱(celery配置文件所在的位置,可以放在某個文件夾下但是得加 文件夾名稱.celery配置) beat -l info
celery -A 任務文件名稱 worker -l info
-l info 的打印信息,不會打印信息,應使用測試debug
解決辦法: celery -A 任務文件名稱 beat -l debug
celery -A 任務文件名稱 worker -l debug
6. celery執行異步任務的時候,不能傳輸對象
原因:因為異步執行的時候,celery執行python代碼,對象沒有緩存,所以celery找不到對象
7. celery執行定時任務的時候,需要傳參數,參數有限制,只能傳int類型和str類型
8. RuntimeError: 'path' must be None or a list, not <class '_frozen_importlib_external._NamespacePath'>
運行celery worker 時出現的錯誤, 因為celery中autodiscover_task
會去掃描每一個注冊的app底下的__init__.py
文件,可能你注冊的APP文件中缺少__init__.py文件。
添加上__init__.py文件就可以了。