2020年2月2日日曜日

如果Python4無法解決全局解釋器鎖定的問題。 2020.02.02當前解決方案。 石塚雅弘(Aon CEO)

截至2020.02.02,
Python 2和3無法解決全局解釋器鎖定的問題。

或者,
使用Go lang開發網站,Intranet,LINE應用程序等。
我認為AI和機器學習的開發使用Python,而Go lang通過使用網站+ AI(用於Go lang的API庫)+ AI(機器學習)DATA解決了該問題。

相關資料:

再見Python,Hi Go

資料來源:

最近用Go編寫的,以前用Python編寫的任務的作者與Python相比,Go的優缺點的摘要。

原始文字
再見Python,Hello Go (英語)
翻譯請求者
D98ee74ffe0fafbdc83b23907dda3665 df3136f800e7ed9931ed5f9f1afad935
譯者
df3136f800e7ed9931ed5f9f1afad935 姆斯克
翻譯審稿人
D98ee74ffe0fafbdc83b23907dda3665 雙重市場
原作者翻譯報告
502天前 編輯 ,對原始文本有評論
 




我使用Go語言進行了很多以前用Python編寫的處理。 例如,以下處理是可能的。
  • 處理存儲在Amazon S3中的Cloudfront日誌
  • 將巨大(太字節級)文件移入和移出S3的過程
  • 數據庫和S3之間的同步文件匹配
這幾乎總是一次性的過程,因此理想的是用腳本語言編寫它。 該程序需要快速編寫,並且有可能很快被丟棄。 由於這些任務總是新的且獨特的,因此您可以重用的代碼最少。
這裡是使用Go代替Python的優點。

有一個編譯器很好

我經常在Python中犯無聊的錯誤。 變量名稱/函數名稱錯誤或傳遞了錯誤的參數。 開發工具可以找到它們,但是這些工具通常需要特殊的初始化。 我仍然無法輕鬆設置pylint,而且我不喜歡需要它的成熟IDE。
最壞的情況是變量錯誤類型隱藏在條件分支的後面。 該腳本運行了幾個小時後會導致錯誤。 一切搞砸之後,您需要重新運行。
單元測試可以發現許多這些問題。 但是,100%的覆蓋率很困難,我不想花時間在一次性腳本的單元測試上。
編譯語言解決了所有這些問題。 編譯器將捕獲這些錯誤。 因此,我喜歡Go語言來處理數百行數據。

發展速度

編譯器語言的缺點是開發速度慢。 對於C / C ++和Java尤其如此。
當您知道將開發速度保持在最低水平時,Go就足夠簡單了。 我仍然在加快Python的速度,但是與用python編寫相比,go語言的生產率大約為85%。
85%還不錯。 那是因為使用編譯器可以大大減少小錯誤。

並行處理的優勢

如您所知,Go最初是為並行處理而創建的。
我們的團隊經常需要並行處理程序來處理S3和數據庫中的大量數據。
如果任務是IO密集型工作,則Python線程可以提供幫助。 但是,對於佔用大量CPU的任務,就全局解釋器鎖而言,Python很難。
我享受多線程Go無需任何特殊工作即可工作的簡單方式。 將Ctrl-C與多線程Python結合使用時,您是否遇到任何問題?

易於部署

我喜歡使用單個二進製文件。 我經常在EC2上運行代碼。 這是為了使腳本與S3 /數據庫之間的通信路徑更近。 如果使用Python進行此操作,則需要確保所有必需的軟件包都已安裝在遠程計算機上,並且不會與其他同事安裝的任何軟件包發生衝突。
Virtualenv解決了大多數此類問題,但是Go語言更加簡單。
大多數時候,您只需要交叉編譯Linux的Mac go代碼,然後將其複製到遠程計算機上並運行即可。 所有依賴項都包含在二進製文件中。

樣式一致(格式)

起初,我對gofmt工具感到沮喪。 特別是,很難使用製表符縮進代替空格。 我認為這是不正常的。
但是,在使用它時,它變得依賴於gofmt 。 通過自動格式化,無需任何考慮,您就無需進行格式化。 無論我從事什麼項目,我所有的代碼始終採用一致的格式樣式。 格式化是標準Go語言工具的功能。
在Python中,類似的效果(一致的格式)更昂貴。 我必須正確設置pylint並檢查它pylint所有項目中是否一致。

工具優勢

一個例子就是gofmt 。 我使用的任何編輯器(VSCode,vim,Sublime Text)都提供了所有不錯的Go擴展。 這是Go語言作為標準功能提供工具的優勢。
結果是不使用IDE的類似Java的智能感知。 在Python中,我從未接觸過此功能。

缺少部分

每當我看到對Go語言的批評時,都是由於Go中缺少功能(如泛型)所致。 由於缺少泛型,所以我從未遇到過重大問題。 (看到地圖和切片可以做很多事情,您會感到驚訝。)但是我遇到了許多其他問題。

圍棋語言過於自信

Go語言是我聲稱的語言,即使是到目前為止我所寫的語言。 gofmt強制製表符而不是空格開始(假設您使用的是gofmt ),使用特定的目錄結構,並在GOPATH環境變量中構建代碼。 許多這些Go語言功能都不容易更改。
Go學習成本低的原因之一是這些功能無法更改。 如果您不想公開以大寫字母(函數,變量等)開頭的名稱,那不是很好。 幸運的是,這些並沒有困擾我,但我了解其他任何事情。
Python更加靈活。

圖書館提供的東西很少

在這方面比較Python和Go是不公平的。 Go更新得多。 但是當我發現Go不支持的功能時,我很困惑。 當應該作為內置函數的代碼發佈在StackOverflow上時,您會更加困惑,每個人的行為就像將代碼複製並粘貼到您的項目中。
兩個示例(近年來出現的那些示例):
  • 排序切片(幸運的是,自Go1.8起提供)
  • Math.round只能處理整數,不能處理float變量(例如,如果要捨入為.5)。 在Go1.10之前,甚至沒有Math.round。
是的,其中一些是由於Go中缺少泛型,也因為Go開發人員遵循的策略是僅向標準庫添加絕對必要的內容。
我了解以上兩點。 但是,如果遇到必須實現自己的小功能,那就很煩人了。
我希望隨著Go語言的發展,這些煩惱將會減少。

〒197-0828
東京秋留野市Akidome 5-3-11
5-3-11 Akiru秋留野市日本東京
怡安首席執行官
石塚雅弘
(石塚真雄)
電話:042-559-8638
iPhone:070-3861-5011
免費電話

+81 50 5532 0868

Skype的
直播:cloud9slack
http://aon.tokyo
http://aon.co.jp正在準備中
cloud9slack@gmail.com

0 コメント:

コメントを投稿