我一直在玩最近的其他框架,比如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