dask入门(1)

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

分布式系统框架流程:
dask入门(1)_第1张图片
单机模式上运行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 命令,得到以下输出:
    dask入门(1)_第2张图片
    其中,tcp://172.26.244.71:8786 可以做为当前电脑的 url地址,在同一局域网下,可以在另一主机上通过client方法进行主机的连接。client内容为空或者为127.0.0.1.8786时,默认启动本地调度工作程序(此时客户端和本地客户端应建立连接),
    客户端将自身注册为默认的Dask调度程序

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

此时的输出为:
dask入门(1)_第7张图片

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

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

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

  1. 看到了上述结果,发现对于submit和map等函数运行结果中都出现了key关键词,可以试验并且发现,当调用的函数是纯函数时,所得的key应是完全一样的,这就是dask中避免重复计算所才用的策略,当
    出现重复的计算时,只需要比较key的值就能利用旧的结果,而不需要重新计算。
    dask入门(1)_第9张图片
    dask入门(1)_第10张图片
    那就会想到,当函数不纯呢,众所周知的就是random函数,每次执行的值都不同,但是函数是不变的,所以在dask中加入了一个参数:pure,当pure=False时,禁用以上功能。
    dask入门(1)_第11张图片
    在这里插入图片描述
  2. Client.computer() 和delayed(不太懂 待补充)

dask入门(1)_第12张图片
result:
dask入门(1)_第13张图片
发现delay之后需要conpute转换成Future格式,
6. 将数据集发送到调度程序

dask入门(1)_第14张图片
My_datasety 是把数据集命一个新的名称,在与调度机相连的任意客户机都能访问此数据集。
客户机访问数据集:
dask入门(1)_第15张图片

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

你可能感兴趣的:(python工具使用,dask,分布式)