导入自定义模块时Python多处理挂起

导入自定义模块时Python多处理挂起,python,multiprocessing,Python,Multiprocessing,我必须对一个类的实例中的数据进行大量的计算,目前每个计算都有一个循环在运行,但它花费的时间太长了(+50小时) 所以我想尝试并行处理,根据我所读到的,我应该使用多进程模块,而不是线程模块,因为任务是CPU限制的,但我无法让它工作 我可以让多个工作进程在简单任务上运行,但只要导入任何自定义模块,当我调用pool.map时,脚本就会挂起 我没有粘贴实际代码,而是编写了一个具有相同问题的虚拟脚本。请看下面 from multiprocessing import Pool from functools

我必须对一个类的实例中的数据进行大量的计算,目前每个计算都有一个循环在运行,但它花费的时间太长了(+50小时)

所以我想尝试并行处理,根据我所读到的,我应该使用多进程模块,而不是线程模块,因为任务是CPU限制的,但我无法让它工作

我可以让多个工作进程在简单任务上运行,但只要导入任何自定义模块,当我调用pool.map时,脚本就会挂起

我没有粘贴实际代码,而是编写了一个具有相同问题的虚拟脚本。请看下面

from multiprocessing import Pool
from functools import partial

# CUSTOM MODULES AND CLASS
import customModule as cm
from customObjectModule import CustomObject


def function(customObj, a):

    temp1 = cm.HelperClass2(customObj.data1)
    temp2 = cm.HelperClass1() * customObj.data2
    return temp1 * temp2 * a

def main():
    # Creating instance of custom object
    cObj = CustomObject(1,2)
    # using partial to deal with multiple arguments    
    partialF = partial(function,cObj)

    p = Pool(3)
    # running function, being passed the custom object and 
    # and running it for a set of inputs a
    print(p.map(partialF,[1,2,3]))

if __name__ == '__main__':
    main()
我不太清楚为什么它不起作用


谈到python,我也是一个相对的新手。如果有人能指出上面代码中的错误,或者给我指出一些好的参考资料来解释多处理,我将不胜感激

如果将
p.map
简单地替换为
map
,会怎么样?通常情况下,池对象应该在最后关闭并连接,尽管这似乎不是问题的原因。通过将p.map替换为map,您不就是在进程上运行它们吗?当我这样做的时候,它确实工作得很好,但是根本没有速度的提高。你是说我应该在p.map()1之后加上p.close()和p.join()。只需确保该程序适用于单个进程。2.是,在
p.map()
之后添加
p.close()
p.join()
。抱歉,这可能帮不了你解决问题。是的,似乎没什么帮助。谢谢:)对不起,我还没有看到你的代码有任何错误。一个建议是让您的示例代码能够运行,这样人们就可以在自己的计算机上重复您的问题,从而更好地理解错误背后的原因。你可能已经知道,每次编辑都会在时间线上弹出问题,这会让更多的人看到它。如果将
p.map
简单地替换为
map
,它会起作用吗?通常情况下,池对象应该在最后关闭并连接,尽管这似乎不是问题的原因。通过将p.map替换为map,您不就是在进程上运行它们吗?当我这样做的时候,它确实工作得很好,但是根本没有速度的提高。你是说我应该在p.map()1之后加上p.close()和p.join()。只需确保该程序适用于单个进程。2.是,在
p.map()
之后添加
p.close()
p.join()
。抱歉,这可能帮不了你解决问题。是的,似乎没什么帮助。谢谢:)对不起,我还没有看到你的代码有任何错误。一个建议是让您的示例代码能够运行,这样人们就可以在自己的计算机上重复您的问题,从而更好地理解错误背后的原因。你可能已经知道,每次编辑都会在时间线上弹出问题,这会让更多的人看到它。