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

Windows系统下Python multiprocessing跨脚本调用失效问题求解

问题根源
  • 核心错误是你把if __name__ == "__main__"的判断写在了Test.run()方法内部:当Script1被作为模块导入到Script2时,Script1的__name__值为Script1而非__main__,所以run方法里的多进程逻辑直接被跳过,完全不会执行。
  • 次要问题:Script1末尾的Test([2, 3]).run()没有包裹在if __name__ == "__main__"块中,当Script1被导入时这行代码会自动执行,属于不规范写法;Script2的导入语句加了多余的.py后缀,也是语法错误。
  • Windows下Python的multiprocessing默认用spawn方式启动子进程,子进程会重新导入整个入口模块,所以入口脚本的执行逻辑必须套if __name__ == "__main__"避免重复执行,该问题和Spyder无关,但Spyder的交互运行环境可能额外产生兼容性问题。
最佳解决方案

第一步:修改Script1.py

把if __name__ == "__main__"判断从run方法中移除,仅包裹Script1单独运行时的测试逻辑:

# Script1.py
import multiprocessing
class Test(object):
    def __init__(self, x):
        self.x = x

    def square(self, i, return_jobs, x):
        i = x**2
        return_jobs[i] = i 

    def run(self):
        # run方法仅保留业务逻辑,不要加__name__判断
        manager = multiprocessing.Manager()
        return_jobs = manager.dict()
        jobs = []
        for i in range(len(self.x)):
            p = multiprocessing.Process(target = self.square, args=(i, return_jobs , self.x[i]) )
            jobs.append(p)
            p.start()
        for proc in jobs:
            print(proc)
            proc.join()
        print('result',return_jobs.values())
        return return_jobs.values()

# 仅单独运行Script1时才执行测试代码
if __name__ == "__main__":
    Test([2, 3]).run() 

第二步:修改Script2.py

修正导入语法,同时给入口执行逻辑加上if __name__ == "__main__"判断,符合Windows多进程的启动要求:

# Script2.py
# 导入模块不需要加.py后缀
from Script1 import Test 
import multiprocessing

class Test2(object):
    def __init__(self, y):
        self.y = y
        
    def run(self):
        z = Test(self.y).run()
        return z

# 入口执行逻辑必须套__name__判断
if __name__ == "__main__":
    Test2([4,5,6]).run()
Spyder环境适配注意事项
  • Spyder默认的IPython交互控制台不支持multiprocessing的spawn启动模式,运行会报错,建议在运行配置中勾选「在外部系统终端执行」,或者直接用系统cmd/powershell运行脚本即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 15:15:03