Python函数中的多处理:将freeze_support()放在哪里



我正在尝试使用Python 2.7中的一个GGS函数(https://github.com/cvxgrp/GGS,我试图使用的函数位于ggs.py中,它被称为GGSCrossVal,第72行(,但Python向我显示了这个错误:

尝试在当前进程完成其引导阶段之前启动新进程。这可能意味着您在Windows上,忘记在主模块中使用正确的习语:如果name=='main':freeze_support((。。。";freeze_support(("如果程序不会被冻结以生成Windows可执行文件,则可以省略行。

我必须把这个命令放在哪里。

我生成了一个2x3740的数据矩阵,数据取自具有一定均值和一定协方差矩阵的二元分布(实际上我在MATLAB中生成了它们,并在Python中导入(,并以这种方式调用函数:

trainTestResults = GGSCrossVal(data, 25, [10, 1, 0.1, 0.01, 0.001, 0.0001], [], False)

有人能帮帮我吗?谢谢

在windows和macos中,默认情况下,新进程的方式是"产卵";ed基本上等于";启动一个新的python进程,导入所有相同的模块,将"main"文件作为库导入,然后使用pickle交换要调用的函数和参数;。这种在*nix系统上的替代方案是";叉";,其中进程存储器被复制并且新进程从同一点开始。

这里的重要含义是,当使用";"产卵";";主";当它是import时,您正在运行的文件不能产生更多的子线程。如果是这样,第一个子线程将在import __main__时产生孙线程,然后在import __main__时产生曾孙线程,依此类推,创建不完整的递归子进程。这显然是一个问题,因此如果您在导入阶段尝试在子进程中创建新进程,python会引发错误。

避免这个问题的解决方案是防止任何产生子进程的进程在主进程之外执行(当库作为主进程而不是作为库导入时,这对于在库上运行测试也很有用(。

if __name__ == "__main__":
trainTestResults = GGSCrossVal(data, 25, [10, 1, 0.1, 0.01, 0.001, 0.0001], [], False)

相关内容

  • 没有找到相关文章

最新更新