RPyC connect_multiprocess设置sync_request_timeout不生效求助
问题根源
- 第三种方法传参错误:
connect_multiprocess({'sync_request_timeout': 120})把配置字典传给了第一个参数service,而非config参数,导致配置未被应用。 - 第一种方法无效:连接建立后修改
_config,但RPyC部分组件已初始化超时逻辑,后续请求可能仍使用旧值。 - 第二种方法若无效,大概率是因为你需要修改的是服务器端的超时配置,而非客户端的
sync_request_timeout——主进程修改的客户端DEFAULT_CONFIG不会同步到子进程的服务器实例中。
正确解决方案
1. 修改客户端请求超时(sync_request_timeout)
确保正确传递config关键字参数给connect_multiprocess():
from rpyc import connect_multiprocess # 正确传参:指定config关键字 self._conn = connect_multiprocess(config={'sync_request_timeout': 120})
此方法会将配置传递给客户端连接,覆盖默认的30秒超时,后续同步请求会使用120秒的超时时间。
2. 修改服务器端处理超时
如果你的超时发生在服务器端处理请求阶段,需通过server_kwargs传递服务器配置:
from rpyc import connect_multiprocess # 给子进程的服务器传递配置,修改服务器端超时 self._conn = connect_multiprocess( server_kwargs={ "config": { 'timeout': 120, # 服务器套接字超时 'request_timeout': 120 # 服务器处理单个请求的超时 } } )
3. 全局修改客户端默认配置(确保顺序正确)
若要全局修改客户端默认配置,需在创建连接之前修改DEFAULT_CONFIG,且确保修改的是客户端的配置(主进程内):
import rpyc from rpyc import connect_multiprocess # 在创建连接前修改默认配置 rpyc.core.protocol.DEFAULT_CONFIG['sync_request_timeout'] = 120 # 此时创建的连接会使用修改后的默认配置 self._conn = connect_multiprocess()
验证方法
修改后,可在客户端调用远程方法时主动触发超时测试,或检查self._conn._config['sync_request_timeout']是否为120;也可在rpyc.core.protocol.py的sync_request方法中添加打印,确认使用的超时值:
# 在sync_request方法中添加打印 def sync_request(self, handler, *args, **kwargs): seq = self._send_request(handler, args, kwargs) timeout = self._config["sync_request_timeout"] print(f"Using sync_request_timeout: {timeout}") # 添加此行 with Timeout(timeout): while seq not in self._sync_replies: self.serve() # ... 后续代码
内容的提问来源于stack exchange,提问作者kozprog
相关产品推荐
相关产品推荐

