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

时间:2017-04-25 05:52:47

标签: python multithreading sockets synchronization

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

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

  1. 服务器将监听连接。
  2. 对于每个新连接接受,它将创建一个新的线程
  3. 在每个线程中收到一条消息,并将信息存储在字典中。
  4. 然后服务器将在字典中发回一个回复数量的值。
  5. 客户端将接收的值的数量应该相同,因为必须在所有线程之间共享字典。

    我面临的错误是没有以共享方式访问字典。我知道我面临的是所谓的种族问题。 我尝试使用锁,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
    

1 个答案:

答案 0 :(得分:0)

检查出来:

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?