Celery 证明任务存在

Max*_*Max 5 python status task celery

我有一个问题,Celery 为队列中的任务以及不存在的任务分配“待处理”状态:请参阅 Celery 文档

我尝试用这里提到的解决方案来解决它:Stackoverflow 但这对我来说不起作用。

我有以下设置:

  • 芹菜4.1.0
  • 雷迪斯4.0.9
  • 蟒蛇3
  • 猎鹰1.4.1

我的任务定义如下tasks.py

import celery
from celery.signals import after_task_publish

CELERY_BROKER = 'redis://localhost:6379/0'
CELERY_BACKEND = 'redis://localhost:6379/0'

app = celery.Celery('my_app', broker=CELERY_BROKER, backend=CELERY_BACKEND)

@app.task(bind=True, name='testing_async')
def testing_async(self):
    string_result = "This is a async task call"
    return dict(status_code=1, error_message=string_result)

@after_task_publish.connect
def update_sent_state(sender=None, body=None, **kwargs):
    task = app.tasks.get(sender)
    backend = task.backend if task else app.backend
    backend.store_result(body['id'], None, "SENT")
Run Code Online (Sandbox Code Playgroud)

然后在我的views.py我称之为:

from celery.result import AsyncResult
from app.tasks import testing_async

class TestAsync(object):
    def on_get(self, req, resp):
        task = testing_async.apply_async()
        resp.status = falcon.HTTP_200
        resp.body = json.dumps(dict(status=task.state, jobid=task.id))

class CheckIdentifierStatus(object):
    def on_get(self, req, resp, task_id):
        task_result = AsyncResult(task_id)
        response = {
            'status': task_result.status,
            'state': task_result.state
        }
        resp.status = falcon.HTTP_200
        resp.body = json.dumps(response)
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,我的状态始终是“待处理”,但我希望它是“已发送”。

{'jobid': '94894297-918d-41d9-824c-591a6b5ea245', 'status': 'PENDING'}
{'status': 'PENDING', 'state': 'PENDING'}
{'status': 'SUCCESS', 'state': 'SUCCESS'}
Run Code Online (Sandbox Code Playgroud)

也许有人暗示我在这里错了,我在这里没有看到状态变化。

编辑1:

这个问题现在已计划在 celery 5.0.0 版本中(从GitHub开始)