本文共 1897 字,大约阅读时间需要 6 分钟。
python dask
关于Python性能的一个常见抱怨是 (GIL)。 由于使用GIL,一次只能有一个线程可以执行Python字节代码。 结果,即使在现代的多核计算机上,使用线程也不会加快计算速度。
库会将计算扩展到多个内核,甚至扩展到多台机器。 有些设置在数千台机器上配置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。
翻译自:
python dask
转载地址:http://yxbzd.baihongyu.com/