2012-12-31 50 views
0

我正在建立一個網站,用戶發送一個隨機項目。每個視圖都會涉及更新很多變量,比如最後看到的是哪些類別,以及下一個隨機選取的類別。但是當我想到這一點時,我覺得這個代碼只有在請求一個接一個地發生時纔會起作用,如果用戶發出並行請求,就會出現問題。我想知道這個問題是真的還是django通過排隊並行請求來處理它。如果這是真的,那麼我正在考慮將新請求(第二個或第三個並行請求)重定向到「每個會話頁面一個請求」。我知道用戶提出並行請求的機會,並且破壞邏輯很小,但我仍然需要照顧它。並行請求同一會話django

回答

0

做出這些決定並不是Django的工作。這與你要使用的服務器技術(例如nginx,gunicorn,postgresql等)有關。如果你設計你的應用程序的方式是web應用程序的功能(即無狀態),你不應該擔心和所有的併發相關的東西應該透明地處理你的「單一的真相來源」,這在你的情況下應該是數據庫。

如果您的Web應用程序的設計/邏輯不符合這些原則,那麼它很可能存在缺陷,您需要重新設計它。

如果你真的認爲你的應用程序是特殊情況,給我們一些更具體的例子,甚至更好的,給我們看一些代碼。

0

Django應用程序可能會爲同一用戶提供並行請求,因此您必須自己處理。好的原則是儘量避免在後端狀態。你可能會考慮是否可以重新設計你的前端來處理狀態。然而,這並非總是可行的。

保持後端狀態的一種方法是使用Memcached,MongoDB或Redis等快速內存數據庫。如果使用正確,我相信這些將允許原子操作。一種選擇是使用公開原子操作的Djangos cache framework(至少在由memcached支持時)。

+0

我有點困惑。 「Django可能有並行請求」是什麼意思?所有網絡應用都無法使用?是不是你用你選擇的網絡容器(例如gunicorn)來配置?你在django中做線程編程嗎?另外django會話(不管後端)和你提到的其他內容有什麼區別?或者你是在暗中討論django會話框架? – rantanplan

+0

@rantanplan感謝您的評論。 1.是的,對於大多數web應用程序來說,並行請求是可能的。 OP詢問django是否以某種方式排隊來自同一用戶的請求,而不是並行處理它們,我回答說。 2.我有時會在Django中進行線程編程,但這裏並不相關。 3.我不是在談論會話框架,我所說的更接近緩存功能。我沒有看到任何參考如何使用Django會話進行原子操作,所以我沒有提及它,隨時提出建議,如果我錯了,我會更新答案(我試着閱讀文檔)。 – Lycha

+0

我最初有點困惑,因爲我認爲你提議編寫處理請求併發的代碼。我對Redis和緩存並不陌生,我只是想知道如何讓它保持狀態,如果它讓它變得更簡單或者更加困擾事情。有沒有可以指向的例子?我真的不知道你的建議是錯的還是不是,我只知道我從來沒有遇到過類似的事情,這讓我很感興趣。 – rantanplan