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