python dask
关于Python性能的一个常见抱怨是全局解释器锁 (GIL)。 由于使用GIL,一次只能有一个线程可以执行Python字节代码。 结果,即使在现代的多核计算机上,使用线程也不会加快计算速度。
Dask库会将计算扩展到多个内核,甚至扩展到多台机器。 有些设置在数千台机器上配置Dask,每台机器都有多个内核。 尽管存在缩放限制,但不容易达到。虽然Dask有许多内置的数组运算,但作为一个非内置的例子,我们可以计算偏度 :
import numpy
import dask
from dask
import
array
as darray
arr
= dask.
from_array
( numpy.
array
( my_data
)
, chunks
=
(
1000
,
)
)
mean
= darray.
mean
(
)
stddev
= darray.
std
( arr
)
unnormalized_moment
= darry.
mean
( arr * arr * arr
)
## See formula in wikipedia:
skewness
=
(
( unnormalized_moment -
(
3 * mean * stddev **
2
) - mean **
3
) /
stddev **
3
)
请注意,每个操作将根据需要使用尽可能多的内核。 即使在计算数十亿个元素时,这也将在所有内核之间并行化。
当然,并非总是可以通过库将我们的操作并行化。 有时我们需要自己实现并行性。
为此,Dask具有“延迟”功能:
import dask
def is_palindrome
( s
) :
return s
== s
[ ::-
1
]
palindromes
=
[ dask.
delayed
( is_palindrome
)
( s
)
for s
in string_list
]
total
= dask.
delayed
(
sum
)
( palindromes
)
result
= total.
compute
(
)
这将计算字符串是否并行为回文,并返回回文数。
虽然Dask是为数据科学家创建的,但它绝不仅限于数据科学。 每当我们需要在Python中并行化任务时,我们都可以使用Dask-GIL或不使用GIL。
翻译自: https://opensource.com/article/19/4/parallel-computation-python-dask
python dask