Python多处理:如何将其保留在指定的函数中?

时间:2016-05-25 14:09:50

标签: python multithreading multiprocessing execution

我是Stack Overflow的长期观察员,但这次我无法找到解决问题的方法,所以我在这里直接问你!

考虑以下代码:

from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == '__main__':
    p = Pool(5)
    print(p.map(f, [1, 2, 3]))

print "External"

它是第一个框中找到here的池进行多处理的基本示例代码,最后是一个print语句。

在Windows 7,Python 2.7上的PyCharm社区中执行此操作时,Pool部分工作正常,但是"外部"也被多次打印。因此,当我尝试在另一个程序中的特定函数上使用多线程时,所有进程最终都会运行整个程序。如何防止这种情况,因此只有给定的函数是多处理的?

我尝试使用Process代替,关闭,加入和/或终止进程或池,将整个东西嵌入到一个函数中,从另一个文件中调用所述函数(然后它开始执行该文件)。我无法找到与我的问题相关的任何内容,并且觉得我错过了一些非常简单的事情。

1 个答案:

答案 0 :(得分:1)

由于print指令没有缩进,因此每次导入python文件时都会执行该指令。也就是说,每次创建新流程时都会这样做。

相反,每次创建进程时都不会执行if __name__ == '__main__下面的所有代码,而只会从主进程执行,而主进程是指令评估为true的唯一位置。

尝试以下代码,您不应该再次看到问题。您应该只看到External仅打印到控制台一次。

from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == '__main__':
    p = Pool(5)
    print(p.map(f, [1, 2, 3]))

    print "External"

相关:python multiprocessing on windows, if __name__ == "__main__"