dask入门(1)

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

分布式系统框架流程:
在这里插入图片描述
单机模式上运行dask:

  1. 简单地例子,求解10个数的平均值。
#dask求解10个数的平均值
Import dask.array as da
Import numpy as np
x=np.arange(10)
#print(x)
y=da.from_array(x,chunks=(100,))#chunks表示划分时每块的大小(大数据超过内存容量时,需要对数据进行按块划分)
print(y)
print(y.mean())
print(y.mean().compute())
  1. 分布式调度程序:
    首先执行 在命令行窗口执行 dask-scheduler 命令,得到以下输出:
    在这里插入图片描述
    其中,tcp://172.26.244.71:8786 可以做为当前电脑的 url地址,在同一局域网下,可以在另一主机上通过client方法进行主机的连接。client内容为空或者为127.0.0.1.8786时,默认启动本地调度工作程序(此时客户端和本地客户端应建立连接),
    客户端将自身注册为默认的Dask调度程序

在这里插入图片描述
所得的结果为:
在这里插入图片描述
当client不为空时,为另一主机的url:
这时首先在当前客户机输入命令:
在这里插入图片描述
后面的url为scheduler的主机url地址。
此时显示:
在这里插入图片描述
结果表示客户机与主机连接成功,此时就能够利用分布式利用不同主机间运行程序。
在这里插入图片描述

此时的输出为:
在这里插入图片描述

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

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

在这里插入图片描述
2. 如若想显示出来直观的结果,则调用result()方法,则显示出由该方法得出的具体数值。
具体如下:
在这里插入图片描述
result:
在这里插入图片描述
其中对于map()方法来说,map(方法,数值列表)通过遍历数值列表的数值进行数值计算,想直观的看到map()运行后的结果,需要调用client.garher(参数值)方法。

  1. 看到了上述结果,发现对于submit和map等函数运行结果中都出现了key关键词,可以试验并且发现,当调用的函数是纯函数时,所得的key应是完全一样的,这就是dask中避免重复计算所才用的策略,当
    出现重复的计算时,只需要比较key的值就能利用旧的结果,而不需要重新计算。
    在这里插入图片描述
    在这里插入图片描述
    那就会想到,当函数不纯呢,众所周知的就是random函数,每次执行的值都不同,但是函数是不变的,所以在dask中加入了一个参数:pure,当pure=False时,禁用以上功能。
    在这里插入图片描述
    在这里插入图片描述
  2. 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
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值