我在多線程可訪問的Django會話中存儲字典。所有線程都可以更新該字典,線程也可以從字典中獲取值以運行該進程。我想知道Django Session是線程安全的還是我必須使用鎖或信號量?Django會話線程安全嗎?
典型的例子:
Thread1:
threadDict = request.session.get('threadDict', None)
if threadDict['stop']:
#break the for loop exit the thread
else:
#do some processing and update some values in thread dictionary
threadDict['abc'] = 0
request.session['threadDict'] = threadDict (Point1)
def someFunction():
#this function is used to send stop signal to thread
threadDict = request.session.get('threadDict', None)
threadDict['stop'] = True
request.session['threadDict'] = threadDict (Point2)
是否有機會,當它更新Point1
在會議Point2
更新線程字典剛過也更新它,然後我stop
退出線程丟失。
更多信息
AJAX請求開始四個線程,其下載採樣來自4個不同的網址。爲什麼我使用線程?因爲我想向用戶展示哪些樣本目前正在下載以及哪些樣本已經下載。所有線程將在會話中的字典中更新其狀態。線程啓動後,我每兩秒鐘發出一次ajax請求,並從會話中取出字典並讀取線程的當前狀態。但是這個想法失敗了,因爲線程獨立於請求和會話。每個ajax請求都有它的會話,但是我不能將該會話傳遞給線程,因爲當它們一旦開始時,它們獨立於世界其他地方(可能我可以傳遞它,但是我可能無法通過它,因爲處理正在由線程)。所以要解決這個問題,我選擇緩存框架而不是會話。因爲緩存可以從任何地方訪問。線程將它們的狀態存儲在字典中,並放回緩存中,每隔兩秒鐘我就從緩存中取出字典並讀取狀態。根據我的經驗緩存還有一件事情不是線程安全的。所以對於四個線程,我單獨使用了四個字典。
如果我沒有記錯,您可以編輯您的問題並將信息添加到它。 – Tanriol
好的,謝謝我在問題中增加了更多細節。 –