python中的多线程客户端

python中的多线程客户端,python,multithreading,python-3.x,networking,python-3.6,Python,Multithreading,Python 3.x,Networking,Python 3.6,当我连接到服务器时,我遇到了一个问题,它连接正确,线程中的代码运行良好,问题是我似乎没有收到任何消息,或者至少self.data没有更新,我尝试使用print(“”)检查,似乎代码没有到达启动线程后的while循环。这是我的密码: class Client: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) def __init__(self, address): self.sock.connect

当我连接到服务器时,我遇到了一个问题,它连接正确,线程中的代码运行良好,问题是我似乎没有收到任何消息,或者至少self.data没有更新,我尝试使用print(“”)检查,似乎代码没有到达启动线程后的while循环。这是我的密码:

class Client:
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    def __init__(self, address):
        self.sock.connect((address, 10000))
        self.playerID = PID
        self.data = [0, 0, 0, 0, 0]


        iThread = threading.Thread(target=self.game(self.data))
        iThread.daemon = True
        iThread.start()

        while True:
            data = self.sock.recv(2048)
            datas = pickle.loads(data)
            for i in range(0, len(self.data)):
                self.data[i]= datas[i]
            if not data:
                break

    def game(self, data):
        morecode...

下面是一个实验,其中一个
线程
被指定为没有参数的目标,但目标已经结束了它所需要的参数:

from threading import Thread

import time

def func1(data):
    time.sleep(2)
    data.append(2)


def func(data):

    def func2():
        func1(data)

    print(data)
    t=Thread(target=func2)
    t.start()
    t.join()
    print(data)
    t=Thread(target=lambda: func1(data))
    t.start()
    t.join()
    print(data)


func([0])
输出:

[0]
[0, 2]
[0, 2, 2]

这个答案在这里是为了说明有办法给
线程
一个目标,这是一种结束形式。

游戏是否返回任何东西?嗨,不,它只向服务器发送消息并更新列表。当你创建
线程时,你似乎在调用
self.game(self.data)
,而不是让线程调用它。我应该如何让线程调用我的游戏函数?你有没有环顾四周,看到任何创建带有参数的目标线程的示例?我不太工作,谢谢,我按照你的建议,检查了如何使用带有参数的线程,它显示参数是一个元组,因此我必须在该元组中指定参数,如下所示:iThread=threading.Thread(target=self.game,args=(self.data,)