导入Keras中断多处理

2024-04-28 10:46:25 发布

您现在位置:Python中文网/ 问答频道 /正文

在使用keras时,我发现我不能使用多处理.池. 经过一些故障排除,我认为导入keras是问题的根源,并创建了一个简单的例子。在

import keras
from multiprocessing import Pool

def foo(q,y):
    print("In foo")
    return q,y
def test(a, b):
    x = []
    if __name__ == '__main__':
        p = Pool(5)
        print("Starting")
        x = p.starmap(foo, [[a,2],[b,4]])
        print("Finished")
        p.close()
        p.join()
    print(x)

if __name__ == '__main__':
    test(1,3)

输出

^{pr2}$

当运行它输出“开始”然后挂起。如果我删除keras导入,它运行良好,并按预期输出[(1,2),(3,4)]。你知道我怎么解决这个问题吗?或者是什么原因造成的?我还不完全理解python是如何进行多处理的。谢谢!在

我用的是Python和斯派德。在


Tags: namefromtestimportiffoomaindef
1条回答
网友
1楼 · 发布于 2024-04-28 10:46:25

这里有一个对我有用的解决方案,因为子进程不需要导入kera。在

if __name__ != '__mp_main__': #This line solves the problem
    import keras
from multiprocessing import Pool

def foo(q,y):
    print("In foo")
    return q,y
def test(a, b):
    x = []
    if __name__ == '__main__':
        p = Pool(5)
        print("Starting")
        x = p.starmap(foo, [[a,2],[b,4]])
        print("Finished")
        p.close()
        p.join()
    print(x)

if __name__ == '__main__':
    test(1,3)
    print(keras.backend)

我怎么找到这个解决方案的。我运行原始代码,它正常挂起。当它挂起的时候,我注释掉了导入行并保存了文件以备下次测试。当我这么做的时候,代码以某种方式完成了执行。我测试了好几次,以确保这不是侥幸。编辑已运行程序的文件如何影响其运行?然后,我认为if uu name_qu=='\'uu main_Uu'可能类似于c中的if(fork()==0),所以我将它放在导入周围,这样子进程就不会运行它。就像我在运行时手动注释并保存。我测试了它,它起作用了。在

编辑:如果你使用If-name-yu==\uuu-main,那么继承会被破坏,因为它们看起来并不是main。mp_main是游泳池工作人员的名字,这也起作用

相关问题 更多 >