python3 并行计算_Python-并行计算

通过 ipyparallel 包进行并行计算。

具体的内容可以参考:

开启

使用前,需要以管理员模式打开cmd,输入

ipcluster start

开启并行python,一般开启的数量和cpu核心数量相同。

可能开启速度没那么快,直到cmd上显示“Engines apear to have started successfully”之后,在jupyter中使用

import ipyparallel as ipp

c=ipp.Client()

c.ids

之后,才能列出所有的进程。

使用

使用时,有两种方法。

直接使用:

并行计算map_sync:每个核将list中一个参数传入function中,进行计算,完成后选取list中其他值再计算。list中值全部进入function中计算后,最后将结果输出到result。functuon没有return可省略“result = ”

result = c[:].map_sync(function,argue_list)

或者

应用计算apply_sync:各个核将同一个参数传入function,计算结果相同。最后将结果输出到result。functuon没有return可省略“result = ”

result = c[:].apply_sync(function,argue)

DirectView使用:

这块不太明白,类似进行实例化,或者选取其中部分核心进行运算。

首先创造1个view:

view = c[0:3]:使用3个核心

result = view.map_sync(function,argue_list):并行计算

result = view.apply_sync(function,argue):应用计算

关闭

将管理员模式的cmd直接关闭后,就关闭了并行核心。

一些问题

开启了,代码没反应

要使用管理员模式cmd才行。正常cmd不可以。

提示ipcluster是不是有效命令

这种情况要将cmd先进入到安装ipyparallel的文件夹下。我的目录路径如下:

cd c:\Program Files\Anaconda3\Scripts

进入此文件夹之后输入

ipcluster start

才能开启核心

管理员cmd之后,map_sync没反应

这是遇见的一个比较奇怪的问题。

如下代码可用:

def f(x):

return x*x

c[:].map_sync(f,[0,1,2,3,4])

但是将f函数换成自己的其他复杂函数就不能用。

测试后发现,在使用自己的复杂函数进行并行计算前,先进行一次小范围的应用计算:

c[:].apply_sync(complex_function,argue)

之后,再进行并行计算,就可以使用了。

function函数中内外部函数问题

使用这个包的时候,每个核在每次运行时可以看做一个新的python程序,也就是说,在前边import的包,也必须重新import。所以必须将所有包的导入代码,以及自己写的def函数都包含在主函数内:

def main_function(argue):

import ....

def sub_function(x):

#sub_function code

return sub_results

#main_function code

return main_results

results = c[:].map_sync(main_function,argue_list)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值