有没有可能用同一个redis数据库来处理多个使用celery的项目?就像用一个键前缀来缓存多个项目一样。或者我必须为每个安装使用一个单独的数据库吗?
h43kikqp1#
从这篇有用的博客文章中总结:https://kfalck.net/2013/02/21/run-multiple-celeries-on-a-single-redis/
pjngdqdw2#
我在使用带有前缀缓存数据的redis数据库的同时,也使用了一个redis后端来处理celery 。我在开发过程中这样做了,我只在结果后端使用了redis,而不是对任务进行排队,生产部署最终都是AMQP(redis只用于缓存)。我没有遇到任何问题,也不明白为什么会有问题(除了性能问题)。对于运行多个具有不同任务定义的celery 项目,我认为问题是如果您有两种不同类型的工作人员,每种只能处理工作类型的子集,如果没有单独的数据库,我不确定工作人员如何能够区分他们可以处理哪些工作。我可能想要确保所有的工作者都定义了所有的任务类型,并且可以处理任何事情,或者想要将单独的项目保存在单独的数据库中。这不需要安装任何额外的东西,你只需要在你的一个celery 项目中指定一个REDIS_DB=1。可能有另一种方法可以做到这一点。我不确定是否需要多个数据库,但是这有点意义。如果你只使用redis作为结果后台,也许在一个redis数据库上有多个celery 项目也可以......我不是很确定。
2条答案
按热度按时间h43kikqp1#
从这篇有用的博客文章中总结:https://kfalck.net/2013/02/21/run-multiple-celeries-on-a-single-redis/
pjngdqdw2#
我在使用带有前缀缓存数据的redis数据库的同时,也使用了一个redis后端来处理celery 。我在开发过程中这样做了,我只在结果后端使用了redis,而不是对任务进行排队,生产部署最终都是AMQP(redis只用于缓存)。我没有遇到任何问题,也不明白为什么会有问题(除了性能问题)。
对于运行多个具有不同任务定义的celery 项目,我认为问题是如果您有两种不同类型的工作人员,每种只能处理工作类型的子集,如果没有单独的数据库,我不确定工作人员如何能够区分他们可以处理哪些工作。
我可能想要确保所有的工作者都定义了所有的任务类型,并且可以处理任何事情,或者想要将单独的项目保存在单独的数据库中。这不需要安装任何额外的东西,你只需要在你的一个celery 项目中指定一个REDIS_DB=1。可能有另一种方法可以做到这一点。我不确定是否需要多个数据库,但是这有点意义。
如果你只使用redis作为结果后台,也许在一个redis数据库上有多个celery 项目也可以......我不是很确定。