2012-03-28 79 views
1

我有一個django應用程序,用於管理調查註冊。關於django線程安全性的問題

有固定數量的插槽,我想在註冊時爲用戶「預留」插槽。 在我的觀點之一,我得到下一個可用的插槽,並保留它(或重定向用戶,如果沒有插槽可用)。

我想防止兩個用戶同時註冊的情況下得到註冊了相同的插槽,因爲方法「get_next_available_slot」爲兩個用戶返回了相同的插槽。

爲此,我想了解在Django視圖中使用進程和線程。

1)是否每個請求都在一個單獨的線程中處理,並且將使用python線程模塊的LOCK()處理獨佔訪問?

2)我使用modwsgi在RHEL上運行apache。如何配置Apache/modwsgi以確保處理上述情況的更簡單易行的解決方案?

我不希望網絡應用程序負擔過重。所以我想要一個更簡單的解決方案,而不是一個高性能的解決方案。

+0

有關Apache/mod_wsgi中進程/線程模型的一些背景,請閱讀http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading – 2012-03-29 23:09:38

回答

2

您不應該對django應用程序的線程/進程設置做出假設,因爲它取決於您使用的Web服務器以及如何將django集成到它中。因此,進程間通信方法不應該依賴這些細節來保證可靠。一個很好的解決方案是使用內置緩存庫來鎖定和共享數據。

這是一個good example緩存鎖確保一次只能運行一次芹菜任務實例。您也可以將其應用於常規請求。

1

你不應該擔心這種東西。

這些插槽存儲在數據庫中嗎?數據庫應該爲你處理所有的鎖定機制,只要確保你在事務下運行所有​​的東西,你就會好起來的。