繁体   English   中英

带有多线程同步问题的Python套接字

[英]Python socket with multithread synchronization issue

我正在编写一个代码,其中任意数量的客户端将向服务器发送请求。 服务器会将他们的信息收集到一个字典中,并将回复发送给这些客户端。

到目前为止,我所做的是:

  1. 服务器将监听连接。
  2. 对于每个接受的新连接,它将创建一个新线程
  3. 在每个线程中,都会收到一条消息,并将信息存储在字典中。
  4. 然后,服务器将发回字典中的值的答复数。

客户端将接收的值的数量应该相同,因为必须在所有线程之间共享字典。

我面临的错误是字典无法以共享方式访问。 我知道我所面对的是所谓的“条件竞赛”。 我尝试使用锁,RLocks甚至条件变量,但是它不起作用。

请帮助如何进行。

对于线程,我继承了Thread类并重写run()以执行以下操作:

[伪]

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

看一下这个:

import time
import threading

data = {
   'key': []
}


class Thread(threading.Thread):

    def __init__(self, index):
        super(Thread, self).__init__()
        self.index = index

    def run(self):
        time.sleep(0.01)
        data['key'].append(self.index)


if __name__ == '__main__':
    for i in range(10):
        t = Thread(i)
        t.start()
        t.join()

启动线程时是否调用thread.join?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM