我确实有几个巨大的函数,我想利用python中一个单独的处理器来解决每个函数。我用值来捕捉每个处理器的输出,最后进行求和,得到所有函数的最终结果。下面这个简单的例子说明了一切。然而,当我在实际问题中使用相同的过程时,我发现程序只使用一个处理器。另外,解决问题所需的时间不受多重处理的影响,这也是我的代码有问题的另一个原因。
下面我准备了一个简单的例子,用于多处理和数值求解几个分离的函数,并在最后进行求和。这个例子一切正常,如果你检查windows或mac中的处理器(在终端中键入'top'命令),你可以看到程序使用了多个处理器。在from multiprocessing import Process as mp
import multiprocessing
import time
a= time.time()
def f1(num,Amin1):
time.sleep(1)
Amin1.value = num*2
#print(Amin1)
def f2(num,Amin2):
time.sleep(1)
Amin2.value = num*3
#print(Amin2)
def f3(num,Amin3):
time.sleep(1)
Amin3.value = num*2
#print(Amin1)
def f4(num,Amin4):
time.sleep(1)
Amin4.value = num*3
#print(Amin2)
def f5(num,Amin5):
time.sleep(1)
Amin5.value = num*2
#print(Amin1)
def f6(num,Amin6):
time.sleep(1)
Amin6.value = num*3
#print(Amin2)
Amin1 = multiprocessing.Value('d',0.0)
Amin2 = multiprocessing.Value('d',0.0)
Amin3 = multiprocessing.Value('d',0.0)
Amin4 = multiprocessing.Value('d',0.0)
Amin5 = multiprocessing.Value('d',0.0)
Amin6 = multiprocessing.Value('d',0.0)
results1 = mp(target=f1, args=(3,Amin1))
results2 = mp(target=f2, args=(4,Amin2))
results3 = mp(target=f3, args=(3,Amin3))
results4 = mp(target=f4, args=(4,Amin4))
results5 = mp(target=f5, args=(3,Amin5))
results6 = mp(target=f6, args=(4,Amin6))
results1.start()
results2.start()
results3.start()
results4.start()
results5.start()
results6.start()
results1.join()
results2.join()
results3.join()
results4.join()
results5.join()
results6.join()
print(Amin1.value+Amin2.value+Amin3.value+\
Amin4.value+Amin5.value+Amin6.value)
b=time.time()
print(b-a)
以上代码一切正常。
现在在我的例子中,我将使用相同的程序,但这就像下面的代码。在
^{pr2}$
在上面的代码中,我调用了一个错误函数。下面提供了ERROR函数,并在其中使用了多过程。在#Define objective function-min sq
def ERROR(w):
#============================
w = w.tolist()
#============================
V_error_SWG_4B_100 = multiprocessing.Value('d',0.0)
V_error_SWG_4B_150 = multiprocessing.Value('d',0.0)
V_error_SWG_4B_200 = multiprocessing.Value('d',0.0)
V_error_BSS_4B_100 = multiprocessing.Value('d',0.0)
V_error_BSS_4B_150 = multiprocessing.Value('d',0.0)
V_error_BSS_4B_200 = multiprocessing.Value('d',0.0)
V_Single_3000_BR20 = multiprocessing.Value('d',0.0)
V_Single_7100_BR20 = multiprocessing.Value('d',0.0)
V_Single_21500_BR20 = multiprocessing.Value('d',0.0)
V_f_Blunt_D_SWG_BR20 = multiprocessing.Value('d',0.0)
V_Single_19400_BR5 = multiprocessing.Value('d',0.0)
V_Single_19400_BR10 = multiprocessing.Value('d',0.0)
V_Single_19400_BR15 = multiprocessing.Value('d',0.0)
V_Single_19400_BR20 = multiprocessing.Value('d',0.0)
V_Single_19400_BR25 = multiprocessing.Value('d',0.0)
V_Single_19400_BR30 = multiprocessing.Value('d',0.0)
results_error_SWG_4B_100 = mp(target=error_SWG_4B_100, args=(w,V_error_SWG_4B_100))
results_error_SWG_4B_150 = mp(target=error_SWG_4B_150, args=(w,V_error_SWG_4B_150))
results_error_SWG_4B_200 = mp(target=error_SWG_4B_200, args=(w,V_error_SWG_4B_200))
results_error_BSS_4B_100 = mp(target=error_BSS_4B_100, args=(w,V_error_BSS_4B_100))
results_error_BSS_4B_150 = mp(target=error_BSS_4B_150, args=(w,V_error_BSS_4B_150))
results_error_BSS_4B_200 = mp(target=error_BSS_4B_200, args=(w,V_error_BSS_4B_200))
results_Single_3000_BR20 = mp(target=Single_3000_BR20, args=(w,V_Single_3000_BR20))
results_Single_7100_BR20 = mp(target=Single_7100_BR20, args=(w,V_Single_7100_BR20))
results_Single_21500_BR20 = mp(target=Single_21500_BR20, args=(w,V_Single_21500_BR20))
results_f_Blunt_D_SWG_BR20 = mp(target=f_Blunt_D_SWG_BR20, args=(w,V_f_Blunt_D_SWG_BR20))
results_Single_19400_BR5 = mp(target=Single_19400_BR5, args=(w,V_Single_19400_BR5))
results_Single_19400_BR10 = mp(target=Single_19400_BR10, args=(w,V_Single_19400_BR10))
results_Single_19400_BR15 = mp(target=Single_19400_BR15, args=(w,V_Single_19400_BR15))
results_Single_19400_BR20 = mp(target=Single_19400_BR20, args=(w,V_Single_19400_BR20))
results_Single_19400_BR25 = mp(target=Single_19400_BR25, args=(w,V_Single_19400_BR25))
results_Single_19400_BR30 = mp(target=Single_19400_BR30, args=(w,V_Single_19400_BR30))
results_error_SWG_4B_100.start()
results_error_SWG_4B_150.start()
results_error_SWG_4B_200.start()
results_error_BSS_4B_100.start()
results_error_BSS_4B_150.start()
results_error_BSS_4B_200.start()
results_Single_3000_BR20.start()
results_Single_7100_BR20.start()
results_Single_21500_BR20.start()
results_f_Blunt_D_SWG_BR20.start()
results_Single_19400_BR5.start()
results_Single_19400_BR10.start()
results_Single_19400_BR15.start()
results_Single_19400_BR20.start()
results_Single_19400_BR25.start()
results_Single_19400_BR30.start()
results_error_SWG_4B_100.join()
results_error_SWG_4B_150.join()
results_error_SWG_4B_200.join()
results_error_BSS_4B_100.join()
results_error_BSS_4B_150.join()
results_error_BSS_4B_200.join()
results_Single_3000_BR20.join()
results_Single_7100_BR20.join()
results_Single_21500_BR20.join()
results_f_Blunt_D_SWG_BR20.join()
results_Single_19400_BR5.join()
results_Single_19400_BR10.join()
results_Single_19400_BR15.join()
results_Single_19400_BR20.join()
results_Single_19400_BR25.join()
results_Single_19400_BR30.join()
ERROR_value1 =\
V_error_SWG_4B_100.value+\
V_error_SWG_4B_150.value+\
V_error_SWG_4B_200.value+\
V_error_BSS_4B_100.value+\
V_error_BSS_4B_150.value+\
V_error_BSS_4B_200.value
#============================
ERROR_value2 =\
4*V_Single_3000_BR20.value+\
4*V_Single_7100_BR20.value+\
V_Single_21500_BR20.value+\
V_f_Blunt_D_SWG_BR20.value+\
V_Single_19400_BR5.value+\
V_Single_19400_BR10.value+\
V_Single_19400_BR15.value+\
V_Single_19400_BR20.value+\
V_Single_19400_BR25.value+\
V_Single_19400_BR30.value
#============================
ERROR_value = (ERROR_value1/6 + ERROR_value2/16)/2
#============================
#print(ERROR_value1/ERROR_value2)
#print(ERROR_value2)
return (ERROR_value)
主函数(de)调用ERROR函数和inside ERROR函数,我调用16个其他函数使用多处理。但是,运行以上代码是无效的,因为我看到程序只使用一个处理器。
谢谢你的帮助。在