原發表於 Medium 上的 Level Up Coding。
Python 的易用性常常掩蓋了潛在的複雜性。 許多開發人員對通用庫和模式感到滿意,導致學習停滯不前。 然而,並發和低階程式設計等高級主題提供了重要的成長機會。
Talk Python To Me 播客是進階 Python 學習的寶貴資源。 他們的課程「使用 async/await 和線程的 Python 並行程式設計」提供了有關並發和程式碼優化的重要見解。
傳統的電腦科學課程通常涵蓋電腦體系結構、C 程式設計以及互斥體、信號量和指針等概念。然而,對於許多程式設計師來說,這些概念的實際應用仍然難以捉摸。 例如,了解 CPU 核心使用率通常停留在理論上。
本課程重點介紹 unsync
函式庫,這是一個簡化並行和平行程式設計的強大工具。 unsync
將 async
、執行緒和多重處理統一到單一 API 中,根據任務是 CPU 密集、I/O 密集還是非同步來自動最佳化任務。 它透過處理線程管理複雜性來簡化並發程式設計。
以下腳本說明了這些概念:
<code class="language-python"># source: https://github.com/talkpython/async-techniques-python-course/blob/master/src/09-built-on-asyncio/the_unsync/thesync.py import datetime import math import asyncio import aiohttp import requests from unsync import unsync def main(): start_time = datetime.datetime.now() tasks = [ compute_some(), compute_some(), compute_some(), download_some(), download_some(), download_some_more(), download_some_more(), wait_some(), wait_some(), wait_some(), wait_some(), ] [t.result() for t in tasks] end_time = datetime.datetime.now() elapsed_time = end_time - start_time print(f"Synchronous version completed in {elapsed_time.total_seconds():,.2f} seconds.") @unsync(cpu_bound=True) def compute_some(): print("Performing computation...") for _ in range(1, 10_000_000): math.sqrt(25 ** 25 + .01) @unsync() async def download_some(): print("Downloading...") url = 'https://talkpython.fm/episodes/show/174/coming-into-python-from-another-industry-part-2' async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=False)) as session: async with session.get(url) as resp: resp.raise_for_status() text = await resp.text() print(f"Downloaded (more) {len(text):,} characters.") @unsync() def download_some_more(): print("Downloading more...") url = 'https://pythonbytes.fm/episodes/show/92/will-your-python-be-compiled' resp = requests.get(url) resp.raise_for_status() text = resp.text print(f"Downloaded {len(text):,} characters.") @unsync() async def wait_some(): print("Waiting...") for _ in range(1, 1000): await asyncio.sleep(.001) if __name__ == "__main__": main()</code>
此腳本展示了並發任務執行以提高效能:
compute_some
功能: 執行密集計算,展示多執行緒 CPU 核心使用率。 現實世界的應用包括科學計算和數據處理。 download_some
功能: 非同步下載數據,利用 aiohttp
進行非阻塞 I/O。 非常適合網頁抓取和並發 API 呼叫。 download_some_more
功能: 在單獨的執行緒中使用同步請求,適合需要並發而不需要非阻塞 I/O 的簡單場景。 wait_some
功能: 模擬非同步延遲,允許其他任務同時進行。 對於涉及等待外部事件的任務很有用。 該腳本強調了並發程式設計的好處:同時執行任務可以實現更快的處理速度和更有效率的資源利用。
高效的應用程式開發需要了解記憶體 (RAM) 和處理能力 (CPU) 之間的相互作用。 RAM 提供對資料的快速訪問,從而在 CPU 執行指令時實現流暢的多工作業。 充足的記憶體對於處理大型資料集和多項操作至關重要,而強大的 CPU 可確保快速計算和回應應用程式。 理解這種關係對於優化和高效的任務管理至關重要,從而使高效能應用程式能夠處理複雜的任務。
亞歷山大·科瓦列夫拍攝
以上是這個小 Python 腳本提高了對低階程式設計的理解的詳細內容。更多資訊請關注PHP中文網其他相關文章!