学习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文件就可以了
 
posted @ 2020-07-10 11:52  恰恰的故事  阅读(3500)  评论(2编辑  收藏  举报