fak*_*nif 2 python django celery django-celery
我想使用.delay来实现异步行为.使用它的主要原因是为了加快我的观点.我做错了吗?如果是这样,我该怎么做呢?
以下是示例代码:
View.py
@cache_page(60*60*24)
def my_view(request):
something ..... .... ....
a = SomeModel.objects.get(pk=id)
data = celery_task.delay(a)
return dumpjson(status='ok', data=data, callback=callback)
Run Code Online (Sandbox Code Playgroud)
Task.py
def celery_task(a):
res = request.get('http:sample.sample.com/feed/result' params={'abc': 'abc'})
return {'response': res}
Run Code Online (Sandbox Code Playgroud)
如果我从celery_task带来响应,它会显示一些guid(1b52f519-64cb-43da-844a-2886bcccb9bc),错误是这样的:
<EagerResult: 1b52f519-64cb-43da-844a-2886bcccb9bc> is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
你正在推迟该函数并异步调用它.因此,不可避免地,您的代码不会等到它有结果.因为这是重点.
所以Celery将开始celery_task在后台运行,你将不得不向客户返回一些东西,而不知道结果会是什么.也许如果任务完成,它可以将数据保存到数据库中,并且下次用户转到页面时,您可以显示数据库中的完成数据.或其他任何东西.
你从中获得的.delay是对后台任务的一种处理.你可以调用.get()它(如果我没记错的话)并且它将一直挂起,直到它获得返回值,但是你又回到同步调用函数.
| 归档时间: |
|
| 查看次数: |
12115 次 |
| 最近记录: |