一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 幾行代碼讓 Python 函數(shù)執(zhí)行快 30 倍

幾行代碼讓 Python 函數(shù)執(zhí)行快 30 倍

2022-02-12 15:06野客 Python

Python 編程語言,與其他流行編程語言相比主要缺點是它的動態(tài)特性和多功能屬性拖慢了速度表現(xiàn)。Python 代碼是在運行時被解釋的,而不是在編譯時被編譯為原生代碼。在本文中,我們將討論如何用多處理模塊并行執(zhí)行自定義 Pyth

Python 是一種流行的編程語言,也是數(shù)據(jù)科學社區(qū)中最受歡迎的語言。與其他流行編程語言相比,Python 的主要缺點是它的動態(tài)特性和多功能屬性拖慢了速度表現(xiàn)。Python 代碼是在運行時被解釋的,而不是在編譯時被編譯為原生代碼。

幾行代碼讓 Python 函數(shù)執(zhí)行快 30 倍

1、Python 多線程處理的基本指南

C 語言的執(zhí)行速度比 Python 代碼快 10 100 倍。但如果對比開發(fā)速度的話,Python 比 C 語言要快。對于數(shù)據(jù)科學研究來說,開發(fā)速度遠比運行時性能更重要。由于存在大量 API、框架和包,Python 更受數(shù)據(jù)科學家和數(shù)據(jù)分析師的青睞,只是它在性能優(yōu)化方面落后太多了。

2、多處理入門

考慮一個單核心 CPU,如果它被同時分配多個任務,就必須不斷地中斷當前執(zhí)行的任務并切換到下一個任務才能保持所有進程正常運行。對于多核處理器來說,CPU 可以在不同內(nèi)核中同時執(zhí)行多個任務,這一概念被稱為并行處理。

3、它為什么如此重要?

數(shù)據(jù)整理、特征工程和數(shù)據(jù)探索都是數(shù)據(jù)科學模型開發(fā)管道中的重要元素。在輸入機器學習模型之前,原始數(shù)據(jù)需要做工程處理。對于較小的數(shù)據(jù)集來說,執(zhí)行過程只需幾秒鐘就能完成;但對于較大的數(shù)據(jù)集而言,這項任務就比較繁重了。

并行處理是提高 Python 程序性能的一種有效方法。Python 有一個多處理模塊,讓我們能夠跨 CPU 的不同內(nèi)核并行執(zhí)行程序。

4、實現(xiàn)

我們將使用來自 multiprocessing 模塊的 Pool 類,針對多個輸入值并行執(zhí)行一個函數(shù)。這個概念稱為數(shù)據(jù)并行性,它是 Pool 類的主要目標。

我將使用從 Kaggle 下載的 Quora 問題對相似性數(shù)據(jù) 集來演示這個模塊。

上述數(shù)據(jù)集包含了很多在 Quora 平臺上提出的文本問題。我將在一個 Python 函數(shù)上執(zhí)行多處理模塊,這個函數(shù)通過刪除停用詞、刪除 HTML 標簽、刪除標點符號、詞干提取等過程來處理文本數(shù)據(jù)。

preprocess() 就是執(zhí)行上述文本處理步驟的函數(shù)。

可以在 這里 找到托管在我的 GitHub 上的函數(shù) preprocess() 的代碼片段。
現(xiàn)在,我們使用 multiprocessing 模塊中的 Pool 類為數(shù)據(jù)集的不同塊并行執(zhí)行該函數(shù)。數(shù)據(jù)集的每個塊都將并行處理。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import multiprocessing
from functools import partial
from QuoraTextPreprocessing import preprocess
 
BUCKET_SIZE = 50000
 
def run_process(df, start):
    df = df[start:start+BUCKET_SIZE]
    print(start, "to ",start+BUCKET_SIZE)
    temp = df["question"].apply(preprocess)
 
chunks  = [x for x in range(0,df.shape[0], BUCKET_SIZE)]  
pool = multiprocessing.Pool()
func = partial(run_process, df)
temp = pool.map(func,chunks)
pool.close()
pool.join()

該數(shù)據(jù)集有 537,361 條記錄(文本問題)需要處理。對于 50,000 的桶大小,數(shù)據(jù)集被分成 11 個較小的數(shù)據(jù)塊,這些塊可以并行處理以加快程序的執(zhí)行時間。

5、基準測試

人們常問的問題是使用多處理模塊后執(zhí)行速度能快多少。我在實現(xiàn)了數(shù)據(jù)并行性,對整個數(shù)據(jù)集執(zhí)行一次 preprocess() 函數(shù)后對比了基準執(zhí)行時間。

運行測試的機器有 64GB 內(nèi)存和 10 個 CPU 內(nèi)核。

多處理和單處理執(zhí)行的基準時間:

幾行代碼讓 Python 函數(shù)執(zhí)行快 30 倍

從上圖中,我們可以觀察到 Python 函數(shù)的并行處理將執(zhí)行速度提高了近 30 倍。

我們可以在我的 GitHub 中找到用于記錄基準測試數(shù)據(jù)的 Python文件。

基準測試過程:

幾行代碼讓 Python 函數(shù)執(zhí)行快 30 倍

結 論:

在本文中,我們討論了 Python 中多處理模塊的實現(xiàn),該模塊可用于加速 Python 函數(shù)的執(zhí)行。添加幾行多處理代碼后,具有 537k 實例的數(shù)據(jù)集的執(zhí)行時間幾乎快了 30 倍。

處理大型數(shù)據(jù)集的時候,我建議大家使用并行處理,因為它可以節(jié)省大量時間并加快工作流程。

到此這篇關于幾行代碼讓 Python 函數(shù)執(zhí)行快 30 倍的文章就介紹到這了,更多相關Python 函數(shù)執(zhí)行內(nèi)容請搜索服務器之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://zhuanlan.zhihu.com/p/408371071

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美日韩中文国产一区二区三区 | 美女mm131爽爽爽久久 | 精品久久久久久久久久久久久久久 | 国产精品性视频免费播放 | 99久久精品免费看国产四区 | 热99精品只有里视频最新 | 福利片成人午夜在线 | 久久全国免费久久青青小草 | 99精品久久精品一区二区小说 | 九九精品视频在线观看 | 国产成人福利色视频 | 特黄特色大片免费视频播放 | 国产精品成人扳一级aa毛片 | 国产在线观看精品香蕉v区 国产在线观看a | 天堂8在线天堂资源bt | 波多野结衣亚洲一区 | 国产福利视频一区二区微拍 | 男人天堂中文字幕 | 狠狠色综合久久久久尤物 | 福利片免费一区二区三区 | tiny4k欧美极品在线 | 不良研究所地址一 | 91精品久久国产青草 | 久久毛片免费看一区二区三区 | 亚洲国产精品网站久久 | 2021最新国产成人精品免费 | 女人张开腿 让男人桶个爽 免费观看 | 99热久久这里只有精品6国产网 | 免费国产之a视频 | 精品国产免费久久久久久 | 国产色在线观看 | 久久精品国产在热亚洲 | 国产高清视频一区二区 | 国产精品天天在线 | 亚洲 欧美 在线观看 | 3d蒂法精品啪啪一区二区免费 | girlfriend动漫在线播放 | 国产精品视频久久久 | 九色PORNY真实丨国产大胸 | 久久久久久久久人体 | 翁息肉小说老扒 |