Python 潮流周刊#15:如何分析異步任務(wù)的性能?
△點(diǎn)擊上方“Python貓”關(guān)注 ,回復(fù)“1”領(lǐng)取電子書

你好,我是貓哥。這里每周分享優(yōu)質(zhì)的 Python、AI 及通用技術(shù)內(nèi)容,大部分為英文。標(biāo)題取自其中一則分享,不代表全部?jī)?nèi)容都是該主題,特此聲明。
本周刊精心篩選國(guó)內(nèi)外的 250+ 信息源,為你挑選最值得分享的文章、教程、開源項(xiàng)目、軟件工具、播客和視頻、熱門話題等內(nèi)容。愿景:幫助所有讀者精進(jìn) Python 技術(shù),并增長(zhǎng)職業(yè)和副業(yè)的收入。
??文章&教程
如何分析 FastAPI 異步請(qǐng)求的性能?[1]
cProfile 這種基于函數(shù)調(diào)用的分析工具無法有效分析異步操作的執(zhí)行時(shí)間,文章介紹了 pyinstrument[2] 這個(gè)分析庫,結(jié)合 FastAPI.middleware 裝飾器,并使用 speedscope[3] 來可視化 FastAPI 程序的耗時(shí)情況。
利用 FastAPI 的后臺(tái)任務(wù):增強(qiáng)性能和響應(yīng)能力[4]
介紹了 FastAPI 的 BackgroundTasks,可以創(chuàng)建后臺(tái)任務(wù),用于管理長(zhǎng)時(shí)間運(yùn)行的任務(wù),而不阻塞主進(jìn)程。
使用 Python 創(chuàng)建直方圖[5]
直方圖又名“柱狀圖”,可直觀查看數(shù)據(jù)的分布趨勢(shì)、離散程度和異常值等信息。文中介紹了 Matplotlib、Plotly、Seaborn、Numpy 和 Pandas 等工具繪制直方圖的方法,介紹各種直方圖的樣式和風(fēng)格、處理異常值、分析時(shí)間序列數(shù)據(jù)等。
Mypy 1.5 發(fā)布了[6]
Mypy 是 Python 的靜態(tài)類型檢查工具,1.5 版本主要功能有:不再支持 Python 3.7、更靈活的 TypedDict 創(chuàng)建和更新、可顯示錯(cuò)誤代碼的文檔鏈接、實(shí)驗(yàn)性改進(jìn)了泛型函數(shù)的類型推斷、對(duì) Python 3.12 的部分支持,等等。
在 Linux 上運(yùn)行 Python 的“Hello World”腳本時(shí),會(huì)發(fā)生什么?[7]
在 py 文件中寫上一句print("hello world"),然后在命令行執(zhí)行這個(gè)文件,幕后都發(fā)生了什么呢?文章使用了 readelf 、strace 、ldd 、debugfs 、/proc 、ltrace 、dd 和 stat 等工具,詳細(xì)解釋了腳本被執(zhí)行的過程。主要涉及操作系統(tǒng)相關(guān)的內(nèi)容,而不是 CPython 解釋器。(附:文章還引用了最近很火的 [Putting the "You" in CPU ](https://cpu.land/ "Putting the "You" in CPU ") ,介紹計(jì)算機(jī)是如何運(yùn)行程序的,強(qiáng)烈推薦!)
通過對(duì)比 Python 來學(xué)習(xí) PostScript[8]
PostScript 是電子出版和桌面出版領(lǐng)域的頁面描述語言,廣泛用于打印機(jī)、出版和圖形設(shè)備。文章將一段 PostScript 程序直譯成 Python 代碼,可以讓你快速了解這門語言的語法。
Python 中不那么隨意的性能優(yōu)化[9]
作者的一段代碼,用 Rust 花了 950 毫秒,而 Python 卻花 70 秒!這怎么能忍!將生成器寫法改成 for 循環(huán)后,只是輕微提速,使用 Numpy 和多進(jìn)程做了一些優(yōu)化后,終于看到了比較可觀的數(shù)據(jù)。不同代碼方案的對(duì)比、Python 底層工作原理、內(nèi)存使用效率問題,以及語言特性的差異。
在 Python 中創(chuàng)建上下文管理器[10]
如何用 Python 創(chuàng)建自己的上下文管理器?上下文管理器是可以在 with 代碼塊中使用的對(duì)象,在進(jìn)入和退出時(shí)做一些操作。文章介紹了上下文管理器的實(shí)現(xiàn)細(xì)節(jié)。
一個(gè)簡(jiǎn)單的模塊,可以篡改 Python 解釋器的數(shù)字[11]
一篇有意思的文章。導(dǎo)入一個(gè)模塊后,可以將 8 和 9 互換,即print(8) 會(huì)打印出 9。文章展示了如何用 C 編寫一個(gè)簡(jiǎn)單的模塊,介紹了 CPython 中整數(shù)對(duì)象池的實(shí)現(xiàn),并通過修改兩個(gè)整數(shù)的引用,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的篡改數(shù)字的效果。
為什么說 Python 很糟糕……[12]
一篇給 Python 潑冷水的文章,主要觀點(diǎn)是認(rèn)為 Python 不適合于開發(fā)大型應(yīng)用。批評(píng)的點(diǎn)包括動(dòng)態(tài)和鴨子類型、性能問題、代碼維護(hù)和重構(gòu)難等問題。
Python 中錯(cuò)誤處理的最佳實(shí)踐[13]
Python 之禪說“錯(cuò)誤不應(yīng)該悄無聲息地被忽略”,強(qiáng)調(diào)了應(yīng)該直面錯(cuò)誤和透明處理。文章指出了一些糟糕的錯(cuò)誤處理寫法,給出了盡早檢查錯(cuò)誤、快速失敗處理等編程建議。
使用企業(yè)數(shù)據(jù)和 Python 構(gòu)建 GPT 對(duì)話機(jī)器人[14]
這篇教程介紹了搭建企業(yè)中 GPT 對(duì)話機(jī)器人的完整流程,包括數(shù)據(jù)索引、查詢檢索、集成 LLM、使用 FastAPI 開發(fā)接口、uvicorn 作部署。
Python 雞尾酒:將上下文管理器和迭代器等量混合[15]
tenacity 庫提供了一種用迭代器和上下文管理器組合的寫法,實(shí)現(xiàn)重試機(jī)制。這篇文章演示了如何用自定義的迭代器和上下文管理器,來實(shí)現(xiàn)同樣的功能,可以讓你更深入理解這兩個(gè)好用的特性。
索引的力量:利用 Pandas 提高數(shù)據(jù)整理效率[16]
Pandas 被廣泛用于數(shù)據(jù)處理,文章介紹了如何高效利用索引技術(shù),提升它整理數(shù)據(jù)的速度和效率。介紹了多種索引技術(shù),例如基于整數(shù)的索引、布爾索引、設(shè)置新索引并重置舊索引、排序索引。
殺死 ProcessPoolExecutor[17]
Python 不適合處理 CPU 密集型任務(wù),文章中項(xiàng)目原本使用進(jìn)程池來規(guī)避 GIL 問題,后使用線程、C++ 擴(kuò)展和更精細(xì)調(diào)整的 GIL 控制,將內(nèi)存使用量減少 50%,CPU 使用量減少約 20%,線程和進(jìn)程減少約 70%,I/O 流量減少 100%。
??Python潮流周刊??已免費(fèi)發(fā)布了 15 期,訪問下方鏈接,即可查看全部?jī)?nèi)容:https://pythoncat.top/tags/weekly
如果你覺得周刊有價(jià)值,請(qǐng)表達(dá)小小心意,贊賞一下貓哥吧~~
???項(xiàng)目&資源
pyinstrument:Python 的調(diào)用堆棧分析器[18]
一個(gè)輕量級(jí)、無侵入的 Python 代碼性能分析庫,支持分析異步任務(wù)和事件循環(huán)代碼,可生成多種格式的分析報(bào)告,包括文本、HTML 和火焰圖。(star 5.5K)
viztracer:低開銷的日志記錄/調(diào)試/分析工具,可視化 Python 代碼的執(zhí)行[19]
國(guó)人開源的日志記錄/調(diào)試/分析工具,支持線程、多進(jìn)程、子進(jìn)程和異步,支持火焰圖、遠(yuǎn)程連接、虛擬調(diào)試等,有強(qiáng)大的前端,可流暢渲染 GB 級(jí)堆棧信息。(star 3.5K)
tenacity:Python 重試庫[20]
可提供簡(jiǎn)單而靈活的方式來實(shí)現(xiàn)可靠的重試機(jī)制,支持指定重試次數(shù)、重試間隔時(shí)間、重試的回調(diào)函數(shù)、根據(jù)不同的錯(cuò)誤條件進(jìn)行重試等功能,減少手動(dòng)處理錯(cuò)誤和異常的麻煩。(star 5.1K)
litestar:輕量、靈活且可擴(kuò)展的 ASGI API 框架[21]
一個(gè)高性能的 ASGI API 框架,其早期版本是基于 Starlette[22] 開發(fā)的,命名為 Starlite,但從 2.0 版本起已完全移除 Starlette 依賴,并改名為 litestar。核心特性:基于類的控制器、依賴注入、分層中間件、插件系統(tǒng)、OpenAPI 3.1、內(nèi)置 Trio,等等。(star 2.5K)
Make-It-3D:利用單個(gè)圖像創(chuàng)建高保真 3D 模型[23]
從圖片中分割物體,創(chuàng)建高保真的 3D 幾何形狀,可作 360° 旋轉(zhuǎn)展示。(star 1.2K)
Color-diffusion:對(duì)黑白圖像進(jìn)行著色的擴(kuò)散模型[24]
使用 diffusion 模型對(duì)黑白圖像進(jìn)行著色,使用 LAB 色彩空間實(shí)現(xiàn),這是 RGB 色彩空間的 3 通道替代方案。
DevOpsGPT:AI 驅(qū)動(dòng)的自動(dòng)化軟件開發(fā)系統(tǒng)[25]
將 LLM 與 DevOps 工具相結(jié)合,將自然語言需求轉(zhuǎn)換為可工作的軟件。無需繁瑣的需求文檔編寫與溝通,縮短開發(fā)與交付時(shí)間,加速軟件部署和迭代。(star 1.2K)
ILibCST:Python 的具體語法樹解析器和序列化器庫[26]
具體語法樹(Concrete Syntax Tree)是在詞法分析和語法分析階段后生成的一種數(shù)據(jù)結(jié)構(gòu),可用于分析代碼結(jié)構(gòu),執(zhí)行語義分析、重構(gòu)優(yōu)化和代碼生成等操作。(star 1.2K)
hypothesis:功能強(qiáng)大、靈活且易于使用的庫,用于基于屬性的測(cè)試[27]
基于屬性的測(cè)試(Property-based Testing)是一種軟件測(cè)試方法,其中測(cè)試用例的生成和驗(yàn)證是基于定義的屬性或規(guī)約。傳統(tǒng)的單元測(cè)試要給定具體的測(cè)試用例,而基于屬性的測(cè)試則是隨機(jī)生成大量的測(cè)試數(shù)據(jù)。(star 6.8K)
??播客&視頻
Python People 播客[28]
這是一檔新上線一個(gè)月的播客欄目,每周訪談 Python 社區(qū)里一位有突出貢獻(xiàn)的大佬。目前已訪談的嘉賓有 Michael Kennedy(Talk Python to Me 和 Python Bytes 的主理人)、Paul Everitt( JetBrains 和 PyCharm 的開發(fā)者倡導(dǎo)者)、Brett Cannon(Python 核心開發(fā)者)、Barry Warsaw(Python 核心開發(fā)者,非常早的成員)、Bob Belderbos(Pybites 的主理人)。
Talk Python To Me #426:PyScript 的新增功能[29]
Pyscript 使 Python 能夠在瀏覽器中運(yùn)行。這期播客聊了它的最新進(jìn)展。
Stack Overflow Blog #597:了解 SRE[30]
網(wǎng)站可靠性工程(Site Reliability Engineering,SRE)是什么?它和 DevOps 有什么關(guān)系?如何平衡 SRE 的原則與組織結(jié)構(gòu)的關(guān)系?生成式 AI 對(duì) SRE 會(huì)帶來什么影響?
Stack Overflow Blog #593:Python 團(tuán)隊(duì)如何調(diào)整語言以適應(yīng) AI 的未來[31]
播客嘉賓是 Python 核心開發(fā)者和指導(dǎo)委員會(huì)成員 Pablo Galindo Salgado,討論了如何平衡語言設(shè)計(jì)中的一致性和新功能、為什么收集社區(qū)對(duì)新版本的反饋很重要,以及為何他要專注于讓 Python 更快。
??贊助&支持
如果你覺得周刊有價(jià)值,請(qǐng)隨意贊賞[32] 或 買杯咖啡[33] 進(jìn)行支持!
如果你喜歡周刊,請(qǐng)分享給其他需要的同學(xué),讓更多人可以從中受益~
??歡迎訂閱
-
微信公眾號(hào)[34]:除更新周刊外,還發(fā)布其它原創(chuàng)作品,并轉(zhuǎn)載一些優(yōu)質(zhì)文章。(可加好友,可加讀者交流群) -
博客[35] 及 RSS[36]:我的獨(dú)立博客,上面有歷年原創(chuàng)/翻譯的技術(shù)文章,以及從 2009 年以來的一些隨筆。 -
Github[37]:你可以獲取本周刊的 Markdown 源文件,做任何想做的事! -
郵件[38]:在 Substack 上開通的頻道,滿足你通過郵件閱讀時(shí)事通訊的訴求。 -
Telegram[39]:除了發(fā)布周刊的通知外,我將它視為一個(gè)“副刊”,補(bǔ)充發(fā)布更加豐富的資訊。 -
Twitter[40]:我的關(guān)注列表里有大量 Python 相關(guān)的開發(fā)者與組織的賬號(hào)。
參考資料
如何分析 FastAPI 異步請(qǐng)求的性能?: https://blog.balthazar-rouberol.com/how-to-profile-a-fastapi-asynchronous-request
[2]pyinstrument: https://github.com/joerick/pyinstrument
[3]speedscope: https://github.com/jlfwong/speedscope
[4]利用 FastAPI 的后臺(tái)任務(wù):增強(qiáng)性能和響應(yīng)能力: https://noplacelikelocalhost.medium.com/leveraging-background-tasks-in-fastapi-enhancing-performance-and-responsiveness-6e4ad64c7d16
[5]使用 Python 創(chuàng)建直方圖: https://compucademy.net/creating-histograms-with-python/
[6]Mypy 1.5 發(fā)布了: https://mypy-lang.blogspot.com/2023/08/mypy-15-released.html
[7]在 Linux 上運(yùn)行 Python 的“Hello World”腳本時(shí),會(huì)發(fā)生什么?: https://jvns.ca/blog/2023/08/03/behind--hello-world/
[8]通過對(duì)比 Python 來學(xué)習(xí) PostScript: https://kenschutte.com/postscript-vs-python
[9]Python 中不那么隨意的性能優(yōu)化: https://www.nathom.dev/blog/casual_performance_optimization_python/
[10]在 Python 中創(chuàng)建上下文管理器: https://www.pythonmorsels.com/creating-a-context-manager/
[11]一個(gè)簡(jiǎn)單的模塊,可以篡改 Python 解釋器的數(shù)字: https://kenschutte.com/python-swap-ints
[12]為什么說 Python 很糟糕……: https://josvisser.substack.com/p/why-python-is-terrible
[13]Python 中錯(cuò)誤處理的最佳實(shí)踐: https://pybit.es/articles/python-errors-should-not-pass-silently/
[14]使用企業(yè)數(shù)據(jù)和 Python 構(gòu)建 GPT 對(duì)話機(jī)器人: https://www.pythongasm.com/build-gpt-powered-chatbots-around-enterprise-data-with-python
[15]Python 雞尾酒:將上下文管理器和迭代器等量混合: https://www.bitecode.dev/p/python-cocktail-mix-a-context-manager
[16]索引的力量:利用 Pandas 提高數(shù)據(jù)整理效率: https://stackabuse.com/the-power-of-indexing-boosting-data-wrangling-efficiency-with-pandas/
[17]殺死 ProcessPoolExecutor: https://www.tinybird.co/blog-posts/killing-the-processpoolexecutor
[18]pyinstrument:Python 的調(diào)用堆棧分析器: https://github.com/joerick/pyinstrument
[19]viztracer:低開銷的日志記錄/調(diào)試/分析工具,可視化 Python 代碼的執(zhí)行: https://github.com/gaogaotiantian/viztracer
[20]tenacity:Python 重試庫: https://github.com/jd/tenacity
[21]litestar:輕量、靈活且可擴(kuò)展的 ASGI API 框架: https://github.com/litestar-org/litestar
[22]Starlette: https://github.com/encode/starlette
[23]Make-It-3D:利用單個(gè)圖像創(chuàng)建高保真 3D 模型: https://github.com/junshutang/Make-It-3D
[24]Color-diffusion:對(duì)黑白圖像進(jìn)行著色的擴(kuò)散模型: https://github.com/ErwannMillon/Color-diffusion
[25]DevOpsGPT:AI 驅(qū)動(dòng)的自動(dòng)化軟件開發(fā)系統(tǒng): https://github.com/kuafuai/DevOpsGPT
[26]ILibCST:Python 的具體語法樹解析器和序列化器庫: https://github.com/Instagram/LibCST
[27]hypothesis:功能強(qiáng)大、靈活且易于使用的庫,用于基于屬性的測(cè)試: https://github.com/HypothesisWorks/hypothesis
[28]Python People 播客: https://pythonpeople.fm/
[29]Talk Python To Me #426:PyScript 的新增功能: https://talkpython.fm/episodes/show/426/whats-new-in-pyscript-august-2023
[30]Stack Overflow Blog #597:了解 SRE: https://stackoverflow.blog/2023/08/08/understanding-sre-ep-597/
[31]Stack Overflow Blog #593:Python 團(tuán)隊(duì)如何調(diào)整語言以適應(yīng) AI 的未來: https://stackoverflow.blog/2023/07/25/how-the-python-team-is-adapting-the-language-for-an-ai-future-ep-593/
[32]贊賞: https://img.pythoncat.top/wechat_code.png
[33]買杯咖啡: https://www.buymeacoffee.com/pythoncat
[34]微信公眾號(hào): https://img.pythoncat.top/python_cat.jpg
[35]博客: https://pythoncat.top
[36]RSS: https://pythoncat.top/rss.xml
[37]Github: https://github.com/chinesehuazhou/python-weekly
[38]郵件: https://pythoncat.substack.com
[39]Telegram: https://t.me/pythontrendingweekly
[40]Twitter: https://twitter.com/chinesehuazhou
