У меня проблема в том, что Celery присваивает статус «Ожидание» задаче для задач, которые находятся в очереди, а также несуществующих: См. Документация Celery
Я пыталсячтобы решить ее с помощью решения, упомянутого здесь: Stackoverflow , но у меня это не сработало.
У меня есть следующие настройки:
- Celery 4.1.0
- Redis 4.0.9
- Python 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")
Затем в моем 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)
Когда я запускаю свой код, мой статус всегда "Ожидание", но я ожидал, что он будет "Отправлено".
{'jobid': '94894297-918d-41d9-824c-591a6b5ea245', 'status': 'PENDING'}
{'status': 'PENDING', 'state': 'PENDING'}
{'status': 'SUCCESS', 'state': 'SUCCESS'}
Возможно, у кого-то есть подсказка, где я здесь не прав, что я не вижу изменения статуса здесь.
РЕДАКТИРОВАТЬ 1:
Эта проблема сейчас впланируется в выпуске сельдерея 5.0.0 начиная с их GitHub