Python 3多线程:为特定函数创建新线程
Python3 多线程调用带参函数的正确姿势
嗨,我太懂这种时隔多年切换版本后对着熟悉模块发懵的感觉了!其实Python3里的threading模块核心用法和Python2.6没差多少,只是传参的小细节可能让你卡壳了,下面直接给你落地的解决方案:
完整示例代码
先把你的accept_connection函数补全,再加上线程创建的逻辑:
import threading def accept_connection(clientsocket, addr): print(f"成功连接来自 {addr} 的客户端") # 这里写你的业务逻辑,比如接收客户端数据、处理请求 clientsocket.sendall(b"欢迎连接服务器!") # 处理完记得关闭socket(如果需要的话) clientsocket.close() # 假设你已经通过socket.accept()拿到了clientsocket和addr # 比如: # import socket # server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # server_socket.bind(('localhost', 8080)) # server_socket.listen(5) # clientsocket, addr = server_socket.accept() # 创建并启动线程的核心代码 thread = threading.Thread(target=accept_connection, args=(clientsocket, addr)) thread.start()
关键细节解释
- 传参方式:用
threading.Thread的args参数传一个元组,元组里的元素顺序要和函数的参数顺序完全对应。如果你的函数有更多参数,直接往元组里加就行,比如args=(a, b, c)。 - 自动关闭线程:完全不用手动“关闭”线程!当
accept_connection函数执行完毕后,这个线程会自动进入终止状态,Python会帮你回收相关资源。 - 可选的传参方式:如果怕参数顺序搞混,也可以用
kwargs传参(字典形式),可读性更强:thread = threading.Thread( target=accept_connection, kwargs={"clientsocket": clientsocket, "addr": addr} ) thread.start()
额外小提示
- 如果需要等待这个线程执行完再继续主线程逻辑,可以调用
thread.join(),比如:thread.start() thread.join() # 主线程会暂停,直到这个线程执行完毕 - 如果这个线程是后台任务,不需要等它执行完就可以让主线程退出,可以设置
daemon=True:
这样主线程结束时,这个后台线程会被强制终止。thread = threading.Thread(target=accept_connection, args=(clientsocket, addr), daemon=True) thread.start()
内容的提问来源于stack exchange,提问作者GarrukApex
相关产品推荐
相关产品推荐

