python池不起作用

时间:2016-03-19 11:30:11

标签: python multithreading

我尝试使用多线程,为了让它保持简单,我运行以下代码:

import multiprocessing as mp

pool = mp.Pool(4)

def square(x):

    return x**2

results=pool.map(square,range(1,20))

据我所知,结果应该是一个包含从1到20的正方形的列表。 但是,代码似乎没有终止。(在没有池完成的情况下执行相同的操作,在我手动停止之前,这会运行几分钟。)

附加信息:任务管理器告诉我,额外的python进程已经启动并且正在运行,但是使用了我的cpu的0%;还有其他不相关的进程,比如firefox在他们的cpu使用中飙升,而程序正在运行。 我使用的是Windows 8和i5-4300U cpu(汇集到2而不是4也不帮助)

我做错了什么? Pool类是否有任何好的资源,这可以帮助我理解我的代码有什么问题?

2 个答案:

答案 0 :(得分:1)

池初始化的代码应该在__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))

答案 1 :(得分:0)

您的代码会导致每个进程遇到属性错误,因为它无法找到square属性,因为在您实例化池时未定义该属性。因此,这些过程随之而来。在池之前定义平方将解决问题。

另见:

yet another confusion with multiprocessing error, 'module' object has no attribute 'f'