利用python解决实际问题_在python中利用多处理和值解决问题

我确实有几个巨大的函数,我想利用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个其他函数使用多处理。但是,运行以上代码是无效的,因为我看到程序只使用一个处理器。

谢谢你的帮助。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值