Python 多处理 : How do I keep it within the specified function?

标签 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 所示。在第一个框中,在末尾加上打印语句。

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

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

最佳答案

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

相反,if __name__ == '__main__下面的所有代码不会在每次创建进程时执行,而是仅从主进程执行,这是唯一可以执行的地方。指令评估结果为真。

尝试以下代码,您应该不会再看到该问题。您应该期望看到 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__"

关于Python 多处理 : How do I keep it within the specified function?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37439704/

相关文章:

Python: Nose 不接受单元测试

python - 返回 python 对象方法的智能感知

python - PyCharm "no module named sys"

.NET:如何在特定线程上调用委托(delegate)? (ISynchronizeInvoke、Dispatcher、AsyncOperation、SynchronizationContext 等)

java 两个线程操作同一个数组

使用单个函数进行 Python 多处理

python - 在字符串 python 中使用 string.format 和 "{"

c++ - 多线程设计以及撤消/重做堆栈

android - 如何使用 2 个进程从 1 个 android-app 登录到 1 个日志文件

python - 多处理不输出任何内容