Python 潮流週刊#28:兩種執行緒池、四種最佳化程式的方法

豌豆花下貓發表於2023-11-26

你好,我是貓哥。這裡每週分享優質的 Python、AI 及通用技術內容,大部分為英文。本週刊開源,歡迎投稿。另有電報頻道作為副刊,補充發布更加豐富的資訊。

?產品推薦

Walles.AI 是一款適用於所有網站的瀏覽器外掛,支援 GPT4 問答、ChatPDF、網頁內容解釋及翻譯、生成高質量文章、與 Notion 等工具協同、線上摘要 Youtube 影片等。立即前往官網,免費使用(請在 PC 端訪問):安裝地址

?文章&教程

1、四種最佳化程式的方法

很值得推薦的文章。正文部分介紹了最佳化程式的四種方法:使用更好的演算法、使用更好的資料結構、使用底層的程式語言、以及接受不太精確的解決方案。文章開頭和結尾則提出了一些教訓:我們對於效能最佳化問題容易過度樂觀、我們可能只顧效能而犧牲了正確性、不該作過早和複雜的最佳化、最佳化的廣度比最佳化的深度更重要。

2、兩種執行緒池,以及為什麼需要這兩種執行緒池?

由於 GIL 的限制,因此在 Python 中使用執行緒池需要注意業務是 CPU 密集型任務還是 IO 密集型任務,這將導致線上程數量和執行緒池目標上的不同選擇。

3、是時候改變了:datetime.utcnow() 現已被棄用

Python 3.12 版本中datetime.datetimeutcnow()utcfromtimestamp() 方法已被標註為“deprecated”,將在未來版本中刪除。文章介紹了它們的缺陷,解釋了為什麼它們會被棄用。替代的方法分別是:datetime.now()datetime.fromtimestamp()

4、Python Web 應用的線上部署

介紹瞭如何使用 Nginx+Gunicorn+Supervisor、Nginx+uWSGI+Supervisor、Waitress、Meinheld 等不同方案部署 Flask 應用,分析了它們的優缺點。

5、Python GIL 作出的不斷變化的“保證”

介紹了 CPython 全域性直譯器鎖的實現細節,介紹了從 Python 3.9 到目前 3.13 開發版之間的變化。其中有一項很大的差別,在 3.9 及早期版本,GIL 在執行很多位元組碼時會釋放,而在 3.13 版本,只在少數字節碼上檢查是否釋放 GIL。

6、使用 pip-compile 和 pip-tools 作 Django 的依賴項管理

Python 的依賴管理有很多選擇,文章介紹了 pip-compile 和 pip-tools 的組合方案。

7、Python 程式的 bug 分類

作者將程式的 bug 分成四類:型別錯誤和 linting 錯誤、匯入時異常、執行時異常、靜默的錯誤。處理的策略是減少出現後面的錯誤型別,將其變為前面的錯誤處理。

8、有多少 Python 核心開發者使用型別提示?

Python 的型別提示正在逐漸流行,但是,它在核心開發者群體中已經普及到什麼程度了呢?作者經過分析,給出了這樣的資料:所有核心開發者中,大約 53% 的人最近有開源專案,其中 39% 的人使用型別提示。近 3 年裡加入團隊的人中,有 76% 使用型別提示。

9、記一次用 Python 的 ast 模組將 Flask 專案轉為 Quart 的嘗試

作者為了使用 OpenAI 返回的非同步迭代器內容,將不支援非同步的 Flask 專案重構成了支援非同步的 Quart。但手動修改的工作量太大,因此他想到透過解析 ast 來修改,提升專案轉換的效率。

10、Python NumPy 庫的視覺化解釋

文章使用了大量直觀的圖形展示 Numpy 資料的分佈以及資料變化過程,讓你輕鬆掌握 Numpy 資料操作。

11、用組合還是繼承?我有不同看法

傳統觀點認為組合優於繼承,但作者認為 Python 不能很好地支援,若教條式使用組合,只會引入問題,因此作者提供了一種簡單實現的思路。

12、選擇正確的資料儀表板工具:Streamlit 和 Shiny 的獨特優勢

在資料驅動關鍵決策的時代,互動式儀表板已成為商業、科學研究等行業不可或缺的工具。Streamlit 和 Shiny(包括 RShiny 及 PyShiny)是功能強大的框架,文章介紹了它們各自的優勢。

?Python潮流週刊?我會在 電報頻道 分享很多不收錄在週刊裡的內容,目前已有 1200+ 同學關注,歡迎你的加入!

?️專案&資源

1、screenshot-to-code:利用截圖生成 HTML/Tailwind/JS 程式碼

超級火爆的新專案,它使用 GPT-4 Vision 生成程式碼,使用 DALL-E 3 生成與截圖相似的外觀。甚至可以輸入 URL 來實時克隆一個網站!(star 19.4K)

2、sqlalchemy_data_model_visualizer:將SQLalchemy資料模型轉換為漂亮的SVG圖表

將 SQLAlchemy ORM 模型生成高質量的視覺化效果,使用 Graphviz 將每個模型呈現為有向圖,更容易理解資料庫表之間的關係。

資料庫表的有向圖

3、aiconfig:配置驅動的 AI 應用開發框架

它透過將提示、模型引數及模型密切相關的邏輯與應用程式碼分離,降低複雜度。SDK 是與模型無關的,可擴充套件到任何生成式 AI 模型。

4、PyNest:基於 FastAPI 構建的框架,遵循 NestJS 的模組化架構

可以讓你輕鬆構建可擴充套件且可維護的 API,支援依賴注入、型別註釋、裝飾器和程式碼生成。

5、StyleTTS2:近乎人類水平的文字轉語音庫

它利用風格擴散和對抗訓練與大型語音語言模型 (SLM) 來實現人類水平的 TTS 合成。(star 2.7K)

6、pyjokes:程式設計師的一句話笑話(笑話即服務) (github.com)

安裝後,只需從命令列呼叫 pyjoke 或將其新增到 .bashrc 檔案中,每次開啟終端時都會看到一個笑話。

7、gTTS:用於與 Google 的文字轉語音 API 互動

用於呼叫 Google Translate 的文字轉語音 API,提供可定製的語音特定的句子分詞器,以及可定製的文字前處理器。(star 2K)

8、chatfairy:極簡的網頁版聊天室,只依賴 Flask

極簡的聊天室應用,前後端程式碼在僅 115 行的單檔案中,使用 SSE 作後端訊息推送,不依賴websocket,支援使用者認證、多使用者聊天、上下線通知、路由保護。(投稿自@yuxiaoy1)

聊天效果演示

9、streamlit-shadcn-ui:在 streamlit 中使用 shadcn-ui 元件

Streamlit 的元件選擇相對侷限,且樣式比較古老。這個專案將前端流行的 shadcn 元件庫引入到 Streamlit 當中,UI 更為美觀。

10、video-subtitle-remover:用 AI 去除圖片/影片的硬字幕/水印

可無損解析度將影片中的硬字幕去除,生成去除字幕後的檔案,利用 AI 填充原字幕區域;支援自定義字幕位置,支援全影片自動去除所有文字。

11、flowty-realtime-lcm-canvas:使用 LCM 和 gradio 庫的草圖到影像演示

將你的草稿圖實時變成生動的影像,可更改 UI 中的模型 ID 來使用不同的模型。(star 1.5K)

12、pyephem:科學級的天文學計算庫

可執行高精度天文學計算,用於查詢行星、彗星或小行星的位置,確定特定星體的位置,計算月球各階段的日期,天文座標系轉換,確定春分和冬至的日期,等等。

本文首發於:https://pythoncat.top/posts/2023-11-25-weekly

?歡迎訂閱

  • 微信公眾號:除更新週刊外,還發布其它原創作品,並轉載一些優質文章。(可加好友,可加讀者交流群)
  • 部落格RSS:我的獨立部落格,上面有歷年原創/翻譯的技術文章,以及從 2009 年以來的一些隨筆。
  • Github:你可以獲取本週刊的 Markdown 原始檔,做任何想做的事!
  • 郵件:在 Substack 上開通的頻道,滿足你透過郵件閱讀時事通訊的訴求。
  • Telegram:除了釋出週刊的通知外,我將它視為一個“副刊”,補充發布更加豐富的資訊。
  • Twitter:我的關注列表裡有大量 Python 相關的開發者與組織的賬號。