如何将Celery异步结果转换为Json数据?

时间:2019-05-13 07:00:23

标签: python-3.x celery django-celery

在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

0 个答案:

没有答案