偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

速度or實用性:Python真的遇到瓶頸了嗎?

開發(fā) 后端
在本文中,我想澄清一些關于Python的批評,并探討在使用Python進行數據工程、數據科學和分析學的日常工作中,我們是否有必要擔憂速度。

本文轉載自公眾號“讀芯術”(ID:AI_Discovery)。

我是一名Python工程師,所以你可以認為我有偏見。在本文中,我想澄清一些關于Python的批評,并探討在使用Python進行數據工程、數據科學和分析學的日常工作中,我們是否有必要擔憂速度。

[[376425]]

Python速度很慢嗎?

在我看來,這類問題應該基于特定的情境和用例提出。與編譯語言(如C語言)相比,Python處理數字的速度慢嗎?是的,慢。這是眾所周知的事實,這就是為什么Python庫在后臺控制著C語言,而在諸如numpy的Python庫中,速度起著重要作用。

但是對于所有用例來說,Python是否比其他(更難學習和使用的)語言慢得多?你若查看為解決特定問題而優(yōu)化的許多Python庫的性能基準,就會發(fā)現它們與編譯語言相比,表現相當不錯。

例如,看看FastAPI的性能基準——顯然,Go作為一種編譯語言要比Python快得多。盡管如此,FastAPI在構建REST API方面還是勝過了一些Go的庫:

 

速度or實用性:Python真的遇到瓶頸了嗎?

 

 

網絡框架基準(上面的列表不包括C++和Java web框架,它們的性能甚至更高。)

 

我們應該捫心自問的是,我真正需要的速度是多少。如果運行每天只觸發(fā)一次的ETL作業(yè),你可能并不關心它需要20秒還是200秒。你可能更傾向于使代碼易于理解、封裝和維護,特別是考慮到與昂貴的工程時間相比,計算資源正變得越來越便宜。

代碼速度與實用性

[[376426]]

圖源:unsplash

從實用的角度來看,在為日常工作選擇編程語言時,我們需要回答許多不同的問題。

(1) 你能用這種語言切實解決多個業(yè)務問題嗎?

假如你只關心速度,那就別用Python了。各種用例都有更快的替代方案。Python的主要優(yōu)點在于它的可讀性、易用性,以及能用它解決廣泛問題。Python可以用作橋梁,將無數不同的)系統、服務和用例連接在一起。

(2) 你能找到足夠多的懂這門語言的員工嗎?

Python非常容易學習和使用,所以其用戶數量在不斷增長。以前用Excel處理數字的商業(yè)用戶,現在可以很快學會用Pandas編碼,從而自給自足,無需始終依賴IT資源。同時,這消除了IT和分析部門的負擔,也縮短了實現價值的時間。

近些年,比起那些能用Java或Scala做同樣事情的人,你更容易找到那些了解Python并能用這種語言維護Spark數據處理應用程序的數據工程師。許多組織在很多用例中逐漸轉向使用Python,只是因為找到“會說”這種語言的員工的幾率更高。

我知道一些公司非常需要Java或C#開發(fā)人員來維護他們現有的應用程序,但這些語言很難(需要很多年才能掌握),而且對于新程序員來說似乎沒有吸引力,因為他們可以用更簡單的語言(如Go或Python)來獲得更多收入。

(3) 不同領域專家之間的協同效應

假如你的公司使用Python,那么商業(yè)用戶、數據分析師、數據科學家、數據工程師、后端和web開發(fā)人員、DevOps工程師,甚至系統管理員很可能都使用同一種語言。這會引起項目中的協同效應,來自不同領域的人可以一起工作。

數據處理中真正的瓶頸是什么?

在我的工作中,我通常遇到的瓶頸不是語言本身,而是外部資源,來看幾個例子。

(1) 寫入關系數據庫

在以ETL方式處理數據時,最終需要將此數據加載到某個集中位置。盡管可以利用Python中的多線程功能,將數據更快地寫入某些關系數據庫中(通過使用更多線程),但并行寫入操作次數的增加可能會使數據庫的CPU容量使用最大化。

事實上,我在AWS上使用多線程加速RDS Aurora數據庫的寫入操作的時候,這種情況就發(fā)生過一次了。我注意到寫入節(jié)點的CPU利用率非常高,以至于我不得不通過使用更少的線程來刻意降低代碼的速度,以確保不會破壞數據庫實例。

這意味著Python具有并行化并加快許多操作的機制,但關系數據庫(受CPU核數量的限制)有其局限性,僅通過使用更快的編程語言不太可能解決這個問題。

(2) 調用外部的API

使用外部REST API,你可能是想從中提取數據來滿足數據分析需求,這同樣證明了語言本身似乎不是瓶頸。雖然我們可以通過利用并行性來加速數據提取,但這可能是徒勞的,因為外部API限制了我們在特定時間段內可以發(fā)出的請求數量。因此,你可能會刻意讓腳本變慢,來確保不超出API的請求限制:

  1. time.sleep(10) 

(3) 使用大數據

從我處理大量數據集的經驗來看,無論使用哪種語言,都無法將真正的“大數據”加載到筆記本電腦的內存中。對于這樣的用例,你可能需要利用分布式處理框架,如Dask、Spark、Ray等。在使用單個服務器實例或筆記本電腦時,可以處理的數據量是有限制的。

如果你想把實際的數據處理工作轉移到一個計算節(jié)點集群中,可能使用GPU實例來進一步加快計算速度,Python剛好有一個龐大的框架生態(tài)系統,可以簡化這項任務:

  • 你想通過利用GPU來加快數據科學的計算速度嗎?使用Pytorch、Tensorflow、Ray或Rapids吧。
  • 你想加快處理大數據的Python代碼的速度嗎?使用Spark(或Databricks)、Dask或Prefect吧(可在后臺將Dask抽象化)。
  • 你想加快用以分析的數據處理速度嗎?使用快速專用的內存列數據庫,通過SQL查詢確保高速處理。

如果你需要協調和監(jiān)視在計算節(jié)點集群上發(fā)生的數據處理,有幾個用Python編寫的工作流管理平臺,可以加快數據管道的開發(fā)和維護,例如Apache Airflow、Prefect或Dagster。

有些抱怨Python的人,其實并沒有充分利用它,或者可能沒有使用適當的數據結構來解決眼前的問題??偠灾?,如果你需要快速處理大量數據,那你可能需要更多的計算資源,而不是更快的編程語言,而且有一些Python庫可以輕松地將工作分布到數百個節(jié)點上。

速度or實用性:Python真的遇到瓶頸了嗎?

圖源:Google

雖然Python比許多編譯語言慢,但它好用且非常多樣化。對許多人來說,語言的實用性勝過速度方面的考量。語言本身可能不是瓶頸,至少在數據工程中是這樣,瓶頸是外部系統和龐大數據量的限制,無論選擇哪種編程語言都無法在單個計算機上進行處理。

 

責任編輯:趙寧寧 來源: 讀芯術
相關推薦

2010-01-08 12:11:04

ibmdwWeb

2016-12-16 09:37:33

Linux實用性 行動

2013-05-30 09:19:31

災難恢復故障排查運維

2023-12-20 07:52:49

Python高級用法生成器

2011-05-31 18:41:45

復印機技巧

2011-11-02 17:30:36

HTML 5

2020-12-24 06:00:27

Python編程語言開發(fā)

2017-08-12 13:36:15

虛擬化災難恢復服務器

2011-05-03 13:20:39

照片打印機

2024-02-04 00:00:00

Go貨幣接口

2022-08-09 07:08:28

函數式編程Go

2021-07-19 10:13:41

Figma插件工具

2023-11-28 15:19:00

Linux運維btop命令

2018-06-13 15:28:26

筆記本觸控功能

2023-10-12 09:52:13

Bard聊天機器人

2012-06-28 11:31:32

中晶掃描儀

2021-08-18 15:23:42

SDNSD-WAN軟件定義網絡

2010-04-22 17:36:51

Oracle數據庫

2017-11-14 19:17:00

CIO教育智慧校園

2014-09-25 01:31:22

辦公設備智能硬件
點贊
收藏

51CTO技術棧公眾號