擅长:python、mysql、java
<p>回答我自己的问题</p>
<p>Celery为调用代码中的每个任务发回一条结果消息。此消息通过同一AMPQ队列发回。
这就是为什么任务在工作,但队列一直在满。我们没有处理这些结果,甚至对它们不感兴趣。在</p>
<p>我将<code>ignore_result=True</code>添加到celery任务中,因此该任务不会将结果消息发送回队列。这是解决问题的主要办法。在</p>
<p>此外,还添加了配置选项CELERY_SEND_EVENTS=False以加快CELERY的速度。如果设置为TRUE,则此选项使Celery发送外部监视工具的事件。在</p>
<p>除此之外,CELERY_TASK_RESULT_EXPIRES=3600现在确保即使返回结果,如果没有收到/确认,它们也会在一小时后过期。在</p>
<p>最后CELERY_RESULT_PERSISTENT设置为False,这将配置CELERY不在磁盘上存储这些结果消息。当服务器崩溃时,它们就会消失,这在我们的例子中很好,因为我们不使用它们。在</p>
<p>简言之,如果你不需要在你的应用程序中反馈任务是否完成以及何时完成,那么在celery任务上使用<code>ignore_result=True</code>,这样就不会发送任何消息。
如果您确实需要这些信息,请确保收集并处理结果,这样队列就不会填满。在</p>