You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:55:16