芹菜+;Python忽略更新状态调用

芹菜+;Python忽略更新状态调用,python,redis,celery,Python,Redis,Celery,我有一个场景,需要将任务的状态更新为自定义值,然后读取它并根据该值应用一些逻辑 这是我的芹菜配置: celery = Celery(app.import_name, backend='redis://127.0.0.1:6379/0', broker='redis://127.0.0.1:6379/0') celery.conf.update(CELERY_TASK_SERIALIZER='pickle',

我有一个场景,需要将任务的状态更新为自定义值,然后读取它并根据该值应用一些逻辑

这是我的芹菜配置:

celery = Celery(app.import_name,
                backend='redis://127.0.0.1:6379/0',
                broker='redis://127.0.0.1:6379/0')
celery.conf.update(CELERY_TASK_SERIALIZER='pickle',
                   CELERY_RESULT_BACKEND='redis://127.0.0.1:6379/0',
                   CELERY_IGNORE_RESULT=False,
                   CELERY_ALWAYS_EAGER=False,
                   CELERY_ACCEPT_CONTENT=['pickle'],
                   CELERY_RESULT_SERIALIZER='pickle')
所以我基本上使用的是redis+pickle。更新状态的调用如下所示

self.update_state('foo')
但是当我这样调用我的任务并检查状态时:

result = task.delay(*args)
print(result.state)
我总是得到
挂起
成功
,因此跳过任何中间值,即使确实进行了更新调用


如果我检查结果后端类型,我得到Redis,并且
ignore\u result
选项设置为False,则设置为False,到我在这里找到的建议修复都不起作用。

如果我们查看
update\u state
方法的签名,则如下所示

 def update_state(self, task_id=None, state=None, meta=None):
    """Update task state.

    :keyword task_id: Id of the task to update, defaults to the
                      id of the current task
    :keyword state: New state (:class:`str`).
    :keyword meta: State metadata (:class:`dict`).
当我们跑的时候

self.update_state('foo')
它尝试将任务id为
foo
的任务更新为状态
None

相反,我们应该试一试

self.update_state(state='foo')
它将当前任务状态更新为
foo