首页 > 编程知识 正文

dask的中文,dam ksk

时间:2023-05-05 12:56:05 阅读:226043 作者:3468

简介:
dask是一种分布式集群系统,由于python GIL(全局解释锁)的限制,运用多线程时,在同一时刻,只能有一个线程在执行,导致了运用多线程并不会使程序运行速度明显加快,反而由于线程之间的数据传输实现效果并不好。

分布式系统框架流程:

单机模式上运行dask:

简单地例子,求解10个数的平均值。 #dask求解10个数的平均值Import dask.array as daImport numpy as npx=np.arange(10)#print(x)y=da.from_array(x,chunks=(100,))#chunks表示划分时每块的大小(大数据超过内存容量时,需要对数据进行按块划分)print(y)print(y.mean())print(y.mean().compute()) 分布式调度程序:
首先执行 在命令行窗口执行 dask-scheduler 命令,得到以下输出:

其中,tcp://172.26.244.71:8786 可以做为当前电脑的 url地址,在同一局域网下,可以在另一主机上通过client方法进行主机的连接。client内容为空或者为127.0.0.1.8786时,默认启动本地调度工作程序(此时客户端和本地客户端应建立连接),
客户端将自身注册为默认的Dask调度程序


所得的结果为:

当client不为空时,为另一主机的url:
这时首先在当前客户机输入命令:

后面的url为scheduler的主机url地址。
此时显示:

结果表示客户机与主机连接成功,此时就能够利用分布式利用不同主机间运行程序。

此时的输出为:

下面是常用函数以及部分概念:

submit(方法,数值) 对数值执行某种方法,得到结果,结果为:


2. 如若想显示出来直观的结果,则调用result()方法,则显示出由该方法得出的具体数值。
具体如下:

result:

其中对于map()方法来说,map(方法,数值列表)通过遍历数值列表的数值进行数值计算,想直观的看到map()运行后的结果,需要调用client.garher(参数值)方法。

看到了上述结果,发现对于submit和map等函数运行结果中都出现了key关键词,可以试验并且发现,当调用的函数是纯函数时,所得的key应是完全一样的,这就是dask中避免重复计算所才用的策略,当
出现重复的计算时,只需要比较key的值就能利用旧的结果,而不需要重新计算。


那就会想到,当函数不纯呢,众所周知的就是random函数,每次执行的值都不同,但是函数是不变的,所以在dask中加入了一个参数:pure,当pure=False时,禁用以上功能。

Client.computer() 和delayed(不太懂 待补充)


result:

发现delay之后需要conpute转换成Future格式,
6. 将数据集发送到调度程序


My_datasety 是把数据集命一个新的名称,在与调度机相连的任意客户机都能访问此数据集。
客户机访问数据集:

Client.list_datasets 返回调度机上的所有数据集列表。
client.unpublish_datasets(‘my_dataset’) 在调度程序中删除命名的数据集

upload_file 本地报上传到所有客户机中,放置在python系统路径上的临时目录中 可以是封装的包

client.ncores 查看当前可用的核心数
scheduler_info 有关所有客户机的基本信息

Replicate 数据的复制,将数据复制到执行程序的客户机上,有助于提高弹性,分别为每条数据执行树状副本,不能保证数据复制到将来的客户机。

Scatter 将数据分散到分布式内存中,但是最好采用replicate方法。

上面列举一些常见API,具体的内容请看dask手册:
https://distributed.readthedocs.io/en/latest/examples-overview.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。