如何解决ImportError:无法从“ celery.bin.base”导入名称“ Command” Docker示例中的花替代品
当我运行命令时
flower -A main --port=5555
花不起作用,错误是:
> ImportError: cannot import name 'Command' from 'celery.bin.base'
有什么想法吗?主要是Django项目
解决方法
花总是落后于Celery,因此,如果您使用最新的Celery(它们重构了CLI),则可能会失败。坚持4.4.x,直到Flower追上来。
,如果您希望避免降低Celery工人的等级,一种解决方法是将主要版本的Celery单独运行早期版本的Flower。例如,在Docker容器中。 Flower只是监视您的经纪人,并且可以与您的Celery工人完全独立地运行。
Docker示例中的花
对于您的Django / Celery安装,运行Celery normally(无花):
celery -A main worker
对于Flower,请使用docker image mher/flower:0.9.5
,其内部使用Celery 4.4.6,并且为reported working。
以下是示例docker run
命令:
docker run --name flower -p 5555:5555 mher/flower:0.9.5 flower --broker=redis://redis-address
注意:您必须将代理地址更改为代理的dns可解析名称或ip。对于rabbitmq,请使用--broker=amqp://guest@rabbitmq-address:5672//
。有关高级选项,请参见url documentation。
一旦运行,Flower应该可以在Docker主机的IP:5555上获得
您也可以创建一个docker-compose文件,将run命令中的所有参数封装起来,然后使用docker-compose up -d
。
替代品
如果愿意,您还可以使用pip install flower redis celery==4.4.7
在不使用Docker 的情况下完成所有操作,只要它与主要Celery安装分开即可,然后使用{{1} }。一个单独的venv可能适用于此。
有关原始错误的将来更新,请参见github issue。
,在 celery 5.0.5 上工作时遇到同样的问题,所以切换到 celery 4.4.7 版本和花 0.9.7 并且它工作了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。