我必须对一个类的实例中的数据进行大量计算,我现在每个计算都有一个循环运行,但它花了不可思议的长(+50小时)。
所以我想尝试并行处理,从我读过的我应该使用multiproccessing模块而不是线程模块,因为任务是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,我也是一个相对新手。如果有人能够指出上述代码中的错误,或者指向一些有关多处理的更多资源,那么我将非常感激。