В моем приложении Django я определил функцию с фильтром сельдерея @task.
# tasks.py
# import statements
@app.task
def categorise():
# LOC
return results # results should be returning json data
Я использую метод .delay () Celery для вызова этой функции:
def driver(self):
results = categorise.delay()
print("type of results: ", type(results))
return results
Тип, возвращаемый в переменной результатов:
type of results: <class 'celery.result.AsyncResult'>
Я обнаружил следующую ошибку:
Object of type 'AsyncResult' is not JSON serializable
В файл Django settings.py я добавил следующие конфигурации, но это не помогло:
# REDIS related settings
REDIS_HOST = 'localhost'
REDIS_PORT = '6379'
BROKER_URL = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 3600}
CELERY_RESULT_BACKEND = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
Однако я не уверен, как результат асинхронизации может быть преобразован в данные json.
Обновление
Решение найдено.
Используйте .get () для получения вывода json.
def driver(self):
results = categorise.apply_async()
final_results = results.get()
return final_results