发送任务时,Celery不会写状态,这部分是一种优化(请参阅http://docs.celeryproject.org/en/latest/userguide/tasks.html#state)。
如果您确实需要它,添加起来很简单:
from celery import current_app
# `after_task_publish` is available in celery 3.1+
# for older versions use the deprecated `task_sent` signal
from celery.signals import after_task_publish
# when using celery versions older than 4.0, use body instead of headers
@after_task_publish.connect
def update_sent_state(sender=None, headers=None, **kwargs):
# the task may not exist if sent using `send_task` which
# sends tasks by name, so fall back to the default result backend
# if that is the case.
task = current_app.tasks.get(sender)
backend = task.backend if task else current_app.backend
backend.store_result(headers['id'], None, "SENT")
然后,您可以测试PENDING状态,以检测是否已(似乎)未发送任务:
>>> result.state != "PENDING"