我正在尝试使用多线程,为了首先保持简单,我正在运行以下代码:
import multiprocessing as mp
pool = mp.Pool(4)
def square(x):
return x**2
results=pool.map(square,range(1,20))
据我了解,结果应该是一个包含 1 到 20 的方 block 的列表。 但是,代码似乎没有终止。(在没有池眨眼间完成的情况下执行相同操作,这运行了几分钟,然后我手动停止它)。
附加信息:任务管理器告诉我,附加的 python 进程已启动并正在运行,但使用了 0% 的 CPU;当程序运行时,其他不相关的进程(例如 Firefox)的 CPU 使用率也会飙升。 我使用的是 Windows 8 和 i5-4300U cpu(池化为 2 个而不是 4 个也没有帮助)
我做错了什么? Pool 类上有什么好的资源可以帮助我了解我的代码有什么问题吗?
最佳答案
带有池初始化的代码应该位于__name__ == "__main__"
内,因为multiprocessing
每次都会导入模块以生成新进程。
import multiprocessing as mp
def square(x):
return x**2
if __name__ == '__main__':
pool = mp.Pool(4)
results=pool.map(square,range(1,20))
关于python 池不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36101140/