在生产服务器上运行Django / Celery / RabbitMQ时,某些任务已正确发送和使用。但是,RabbitMQ在处理完成后开始用尽所有CPU。我相信这与以下报告有关。
RabbitMQ on EC2 Consuming Tons of CPU
在该线程中,建议设置以下配置值:
我在调用appl_async()时分叉并自定义了celery-haystack软件包以同时设置这两个值,但是似乎没有任何效果。
我认为Celery正在自动创建大量(每个任务一个)以uid命名的队列来存储结果。但是我似乎无法阻止它。
有什么想法吗?
答案 0 :(得分:0)
我自己有一天要研究这个问题。我认为您要解释的两个选项可以这样解释:
input
:如果为CELERY_IGNORE_RESULT
,则任务的结果将被忽略,因此它们不会返回您用True
或delay
进行调用的任何内容。apply_async
:存储在结果后端中的结果的到期时间。您可以将此选项设置为合理的值,以便RabbitMQ可以删除过期的结果。生成的许多队列仅用于存储结果。因此,如果您不想存储任何结果,可以从配置文件中删除CELERY_AMQP_TASK_RESULT_EXPIRES
选项。
有一个愉快的一天!