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

Multiprocessing中Listener调用accept方法时挂起阻塞问题咨询

根本原因

multiprocessing.connection.Listener的accept()是阻塞方法,调用后会持续挂起进程,直到收到匹配的客户端连接请求并完成身份校验才会返回连接对象。你当前只运行了监听端代码,没有对应的客户端发起连接,所以会一直停在这一步。

配套客户端示例

你需要同时运行以下客户端代码,才能完成连接流程:

from multiprocessing.connection import Client

address = ('localhost', 6000)
# authkey必须和监听端完全一致,否则会握手失败无返回
conn = Client(address, authkey=b'secret password')

# 连接建立后可正常收发数据
conn.send('test message from client')
print('收到服务端返回:', conn.recv())
conn.close()

监听端也可以补充接收逻辑验证:

from multiprocessing.connection import Listener

address = ('localhost', 6000)
listener = Listener(address, authkey=b'secret password')
conn = listener.accept() 
print('收到客户端连接:', listener.last_accepted)
print('客户端消息:', conn.recv())
conn.send('response from listener')
conn.close()
listener.close()

异常排查

如果启动客户端后还是卡在accept(),可以检查以下项:

  • 两端authkey必须完全一致,且为字节类型,拼写错误会导致身份校验失败无返回
  • 检查6000端口是否被系统防火墙、安全软件拦截
  • 跨设备访问时不要用localhost,替换为监听端的实际IP地址
  • 需要非阻塞等待的场景,可以配合select模块先监听listener的文件描述符,有连接事件触发时再调用accept()

内容的提问来源于stack exchange,提问作者Mykola Zotko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:54:03