在Django应用程序中,我已使用celery @task过滤器定义了一个函数。
# tasks.py
# import statements
@app.task
def categorise():
# LOC
return results # results should be returning json data
我正在使用Celery的.delay()方法来调用此函数:
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