我的服务器上有芹菜服务。我从celery multi start...
开始,然后停在celery multi stopwait...
。这工作正常,当调用stopwait时,它等待所有工作人员完成他们的任务,然后退出。
我使用start
标记呼叫stopwait
和-E
,并使用django_celery_monitor
来监控任务:
celery events -A myapp --camera django_celery_monitor.camera.Camera --frequency=2.0
这也有效,我将事件状态记录到数据库中,并正确更新任务。
但是当我使用stopwait
来阻止工作人员时会出现问题。如果某个任务正在运行,那么该任务将永远保持在STARTED
状态,即使它已经完成,我猜测是因为事件已经发出,但是由于工作人员事后立即关闭它会丢失。永远不会收到更新后的状态,我不能自己覆盖它们,因为Camera类在运行时会将错误状态写回顶部。
我甚至尝试过使用回调而不是提供的Camera类进行实时处理。在工人终止之前,仍未从最终任务收到成功的任务事件。
如何解决这个问题?我的后端是RabbitMQ。 Celery版本是4.1.0。