學習celery時遇到的坑


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文件就可以了
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM