Dask教程:解释教程中意外的结果

Dask教程:解释教程中意外的结果,dask,Dask,教程页面要求我们在这里提问 在教程01\u dask.delayed中,有以下代码: 并行增量 把…准备好 从时间导入睡眠 def公司(x): 睡眠(1) 返回x+1 def添加(x,y): 睡眠(1) 返回x+y 数据=[1,2,3,4,5,6,7,8] 计算 results=[] 对于数据中的x: y=延迟(包括)(x) 结果。追加(y) 总计=延迟(总和)(结果) 打印(“计算前:,总计)#让我们看看总计是什么类型的东西 结果=总计。计算() 打印(“计算后:,结果)#计算后 此代码需

教程页面要求我们在这里提问

在教程
01\u dask.delayed
中,有以下代码:

并行增量 把…准备好
从时间导入睡眠
def公司(x):
睡眠(1)
返回x+1
def添加(x,y):
睡眠(1)
返回x+y
数据=[1,2,3,4,5,6,7,8]
计算
results=[]
对于数据中的x:
y=延迟(包括)(x)
结果。追加(y)
总计=延迟(总和)(结果)
打印(“计算前:,总计)#让我们看看总计是什么类型的东西
结果=总计。计算()
打印(“计算后:,结果)#计算后
此代码需要1秒。这是有道理的;这8个
inc
计算中的每一个都需要1秒,其余的都是瞬时的,并且可以完全并行运行

并行增量和双精度 把…准备好
def double(x):
睡眠(1)
返回2*x
def为_偶数(x):
返回的不是x%2
数据=[1,2,3,4,5,6,7,8,9,10]
计算
results=[]
对于数据中的x:
如果是偶数(x):#偶数
y=延迟(双倍)(x)
其他:#奇怪
y=延迟(包括)(x)
结果。追加(y)
#总计=延迟(总和)(结果)
总数=总和(结果)
这需要2秒钟,这对我来说很奇怪。情况同上;共有10个操作,每个操作需要1秒,并且可以完全并行运行

我唯一能想象的是,我的机器只能并行处理8个任务,但这很难确定,因为我有一个线程,似乎有些线程有8个,有些线程有16个。(我有一个朋友,苹果公司出了名地喜欢对我们这些老百姓隐瞒这些详细信息。)


有人能证实这是怎么回事吗?我几乎可以肯定,因为将
data
对象的第一部分从
data=[1,2,3,4,5,6,7,8]
切换到
data=[1,2,3,4,5,6,7,8,9,10]
也会将时间切换到2秒。

我相信您的分析是正确的,您有8个线程并行运行,每个线程运行1秒,在继续处理剩余的数据之前,这些数据不会填满所有线程,但仍然需要1秒才能完成

您可能希望尝试使用分布式调度器,它提供了仪表板,可以获得更多关于正在发生的事情的反馈(请参阅本教程后面的内容)