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

为何importlib的exec_module在子线程执行后模块内找不到对应类

根本原因
  • 调用thread.start()后子线程和主线程是并行执行的,主线程不会等待子线程里的spec.loader.exec_module(module)执行完成,就立刻执行了inspect.getmembers遍历模块成员。此时模块加载逻辑还没运行完,MyClass还没有被写入模块对象,自然找不到对应类。
  • 单线程场景下exec_module是同步阻塞执行的,运行完之后模块的所有成员都已经初始化完成,遍历查找自然可以正常匹配到MyClass。
修复方案

在启动子线程后调用thread.join()方法,阻塞主线程直到子线程的模块加载逻辑完全执行完成,再执行后续的类查找逻辑即可,修改后的代码如下:

# 选项2:修复后的线程版本,可正常运行
thread = threading.Thread(target=spec.loader.exec_module, args=[module])
thread.start()
thread.join() # 新增该行,等待子线程加载模块完成

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 09:12:02