新聞中心
Dask 庫可以將 Python 計(jì)算擴(kuò)展到多個核心甚至是多臺機(jī)器。

成都創(chuàng)新互聯(lián)公司專注于策勒網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供策勒營銷型網(wǎng)站建設(shè),策勒網(wǎng)站制作、策勒網(wǎng)頁設(shè)計(jì)、策勒網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務(wù),打造策勒網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供策勒網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
關(guān)于 Python 性能的一個常見抱怨是全局解釋器鎖(GIL)。由于 GIL,同一時刻只能有一個線程執(zhí)行 Python 字節(jié)碼。因此,即使在現(xiàn)代的多核機(jī)器上,使用線程也不會加速計(jì)算。
但當(dāng)你需要并行化到多核時,你不需要放棄使用 Python:Dask 庫可以將計(jì)算擴(kuò)展到多個內(nèi)核甚至多個機(jī)器。某些設(shè)置可以在數(shù)千臺機(jī)器上配置 Dask,每臺機(jī)器都有多個內(nèi)核。雖然存在擴(kuò)展規(guī)模的限制,但一般達(dá)不到。
雖然 Dask 有許多內(nèi)置的數(shù)組操作,但舉一個非內(nèi)置的例子,我們可以計(jì)算偏度:
import numpyimport daskfrom dask import array as darrayarr = 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)
請注意,每個操作將根據(jù)需要使用盡可能多的內(nèi)核。這將在所有核心上并行化執(zhí)行,即使在計(jì)算數(shù)十億個元素時也是如此。
當(dāng)然,并不是我們所有的操作都可由這個庫并行化,有時我們需要自己實(shí)現(xiàn)并行性。
為此,Dask 有一個“延遲”功能:
import daskdef 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()
這將計(jì)算字符串是否是回文并返回文的數(shù)量。
雖然 Dask 是為數(shù)據(jù)科學(xué)家創(chuàng)建的,但它絕不僅限于數(shù)據(jù)科學(xué)。每當(dāng)我們需要在 Python 中并行化任務(wù)時,我們可以使用 Dask —— 無論有沒有 GIL。
本文名稱:使用Dask在Python中進(jìn)行并行計(jì)算
路徑分享:http://fisionsoft.com.cn/article/dhpeeei.html


咨詢
建站咨詢
