我写了一个代码,其中任何数量的客户端将发送请求到服务器。服务器将收集他们的信息到一个单一的字典,并将回复这些客户端的回复。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