我一直在玩最近的其他框架,比如NodeJS。执行非阻塞请求? - Django
我喜欢回复回复的可能性,并且仍然能够进行进一步的操作。
例如
def view(request):
do_something()
return HttpResponse()
do_more_stuff() #not possible!!!
也许Django的已经提供返回的请求后执行操作的方式,如果是这样,这将是巨大的情况下。
帮助将非常感谢! = D
我一直在玩最近的其他框架,比如NodeJS。执行非阻塞请求? - Django
我喜欢回复回复的可能性,并且仍然能够进行进一步的操作。
例如
def view(request):
do_something()
return HttpResponse()
do_more_stuff() #not possible!!!
也许Django的已经提供返回的请求后执行操作的方式,如果是这样,这将是巨大的情况下。
帮助将非常感谢! = D
由于您已退出该方法,因此不能开箱即用。你可以使用类似Celery的东西,它会将do_more_stuff
任务传递到队列中,然后在http请求/响应流之外运行do_more_stuff()
。
因为你从函数返回,所以do_more_stuff永远不会被调用。
如果您正在寻找在做繁重的东西排队东西,你回来之前罗斯建议(+1芹菜)。
然而,如果你正在寻找将一些内容......然后做一些事情,并给用户返回流更多的内容可能是你在找什么。您可以将一个迭代器或一个生成器传递给HttpResponse,它将以涓流的方式迭代并推出内容。这感觉有点坏,但如果你是一个发电机的摇滚星,你可以在各种状态下做足够的事情来完成你想要的。
或者我想你可以简单地重新设计你的页面中使用了大量的AJAX做你需要什么,包括发射了事件Django的观点,阅读从视图中的数据,等等
它种归结为异步的负担将放在哪里:客户端,服务器或响应。
我没那么熟悉Node.js的呢,不过看到你在谈论的使用情况下,它会很有趣。
编辑:我做了一些更寻找到信号,虽然他们确实发生在过程中,有一个内置的信号request_finished后的请求已被Django的处理,但它更是一个包罗万象的不是东西具体。
您可以将线程作为临时修补程序或作为非生产解决方案使用,但它既不是可扩展的,也不是最佳实践。使用芹菜更好的设计!
def foo(request):
import threading
from time import sleep
def foo():
sleep(5)
# Do something
print('hello, world')
threading.Thread(target=foo).start()
return JsonResponse(data={'detail': 'thread started'})
此外,这种方法不会在技术上是不可阻挡的Django是不是在大多数部署无阻塞架构,但它会让你做一些返回响应后。龙卷风会让你执行无阻塞的请求。 – Zack 2010-04-30 09:04:59
@Zack:谢谢你,我没有意识到信号会帮助我。 – RadiantHex 2010-04-30 09:18:47
不要忘记标记为答案:) – Zack 2010-04-30 09:27:55