我寫了一個代碼,其中任何數量的客戶端將發送請求到服務器。服務器將收集他們的信息到一個單一的字典,並將回覆這些客戶端的回覆。Python套接字與多線程同步問題
我迄今所做的是:
- 服務器將偵聽連接。
- 爲每個新連接接受,它將創建一個新線程
- 在每個線程中收到一條消息並將信息存儲在字典中。
- 然後,服務器將發回字典中值的回覆數。
由於字典必須在所有線程之間共享,因此客戶端將接收的值的數量應該相同。
我面臨的錯誤是字典沒有以共享的方式訪問。我知道我面對的是種族的狀況。 我試過使用鎖,RLocks甚至條件變量,但它不工作。
請幫助如何去做。
爲)做了以下主題我繼承Thread類,並覆蓋了運行(:
[僞]
def run(self):
data = sock.recv(1024)
dc["vals"].append(data)
# dc is shared dictionary and values are list
dr = self.processStrings(dc) #need to access all values after updates from all threads
sock.sendall(dr) #this has to be sent to different individual clients back
你可以請共享可執行代碼,這不合格 –
我可能無法發佈可執行代碼,因爲它會通過剽竊檢測器進行檢查。所以可能會導致分配不合格。 –
拋開競爭條件,您爲什麼期望爲所有客戶提供相同的價值?我希望每個新客戶都會增加一個元素的字典,這將導致更高的數字被返回。否則,您如何知道所有客戶是否已連接,並且您準備好做出響應? – JohanL