首頁 >後端開發 >Python教學 >這個小 Python 腳本提高了對低階程式設計的理解

這個小 Python 腳本提高了對低階程式設計的理解

Patricia Arquette
Patricia Arquette原創
2025-01-12 06:40:42510瀏覽

This Small Python Script Improved Understanding of Low-Level Programming

原發表於 ​​Medium 上的 Level Up Coding。


Python 的易用性常常掩蓋了潛在的複雜性。 許多開發人員對通用庫和模式感到滿意,導致學習停滯不前。 然而,並發和低階程式設計等高級主題提供了重要的成長機會。

Talk Python To Me 播客是進階 Python 學習的寶貴資源。 他們的課程「使用 async/await 和線程的 Python 並行程式設計」提供了有關並發和程式碼優化的重要見解。

傳統的電腦科學課程通常涵蓋電腦體系結構、C 程式設計以及互斥體、信號量和指針等概念。然而,對於許多程式設計師來說,這些概念的實際應用仍然難以捉摸。 例如,了解 CPU 核心使用率通常停留在理論上。

本課程重點介紹 unsync 函式庫,這是一個簡化並行和平行程式設計的強大工具。 unsyncasync、執行緒和多重處理統一到單一 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>

腳本分解

此腳本展示了並發任務執行以提高效能:

  1. compute_some 功能: 執行密集計算,展示多執行緒 CPU 核心使用率。 現實世界的應用包括科學計算和數據處理。
  2. download_some 功能: 非同步下載數據,利用 aiohttp 進行非阻塞 I/O。 非常適合網頁抓取和並發 API 呼叫。
  3. download_some_more 功能: 在單獨的執行緒中使用同步請求,適合需要並發而不需要非阻塞 I/O 的簡單場景。
  4. wait_some 功能: 模擬非同步延遲,允許其他任務同時進行。 對於涉及等待外部事件的任務很有用。

學習重點

該腳本強調了並發程式設計的好處:同時執行任務可以實現更快的處理速度和更有效率的資源利用。


高效的應用程式開發需要了解記憶體 (RAM) 和處理能力 (CPU) 之間的相互作用。 RAM 提供對資料的快速訪問,從而在 CPU 執行指令時實現流暢的多工作業。 充足的記憶體對於處理大型資料集和多項操作至關重要,而強大的 CPU 可確保快速計算和回應應用程式。 理解這種關係對於優化和高效的任務管理至關重要,從而使高效能應用程式能夠處理複雜的任務。


亞歷山大·科瓦列夫拍攝

以上是這個小 Python 腳本提高了對低階程式設計的理解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn