为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我的线程在启动之前执行目标函数?

为什么我的线程在启动之前执行目标函数?

慕仙森 2021-09-11 10:07:36
我想了解为什么我必须等待我的接收者线程结束它的工作才能做任何其他事情。我知道我的 sock_listen 函数正在等待连接,这就是它的意思,但我不明白为什么这不会发生在我的线程“内”。对不起,如果这是一个愚蠢的问题,但我有点迷茫!先感谢您!def sock_listen(address, port):    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)    server_address = (address,port)    print("Starting listener on %s and port %s" % server_address)    sock.bind(server_address)    sock.listen(1)    while True:        print("[-] Waiting for connection")        connection, client_address = sock.accept()        print("[+] Connection from " + str(client_address))        data = connection.recv(256)        while (data) :            print("[" + time.strftime("%H:%M:%S") + "] " + str(data))            data = connection.recv(256)receiver = threading.Thread(sock_listen("localhost",10000))print("Nothing reaches me, I can not be printed until the sock_connect func is done looping!")receiver.start()我的目标是进行 TCP 简单聊天,其中专用线程将处理和打印传入消息,主进程将发送用户输入(消息)
查看完整描述

1 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

当您编写时threading.Thread(sock_listen("localhost",10000)),您已经在调用sock_listen并将此调用的结果传递给Thread构造函数。

您需要将可调用的sock_listenastarget和参数sock_listen分别传递给Thread

receiver = threading.Thread(target=sock_listen, args=("localhost",10000))

您的目标函数将在您启动后在新线程中被调用。


查看完整回答
反对 回复 2021-09-11
  • 1 回答
  • 0 关注
  • 154 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信