Python 多处理:如何将其保持在指定的函数内?
Python Multiprocessing: How do I keep it within the specified function?
我一直是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,关闭,加入 and/or 终止进程或池,将整个事情嵌入到一个函数中,从另一个文件调用所述函数(然后它开始执行该文件)。我找不到与我的问题相关的任何内容,感觉好像遗漏了一些非常简单的东西。
由于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__"
我一直是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,关闭,加入 and/or 终止进程或池,将整个事情嵌入到一个函数中,从另一个文件调用所述函数(然后它开始执行该文件)。我找不到与我的问题相关的任何内容,感觉好像遗漏了一些非常简单的东西。
由于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__"