ホームページ >バックエンド開発 >Python チュートリアル >この小さな Python スクリプトにより、低レベル プログラミングの理解が向上しました

この小さな Python スクリプトにより、低レベル プログラミングの理解が向上しました

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-12 06:40:42508ブラウズ

This Small Python Script Improved Understanding of Low-Level Programming

元々は、Medium のレベルアップコーディングで公開されました。


Python の使いやすさは、多くの場合、根底にある複雑さを覆い隠します。 多くの開発者は共通のライブラリやパターンに慣れてしまい、学習が停滞してしまいます。 ただし、同時実行性や低レベルのプログラミングなどの高度なトピックには、大きな成長の機会が提供されます。

Talk Python To Me ポッドキャストは、高度な Python 学習のための貴重なリソースです。 彼らのコース「async/await とスレッドを使用した Python の並列プログラミング」は、同時実行性とコードの最適化に関する重要な洞察を提供します。

従来のコンピューター サイエンスのカリキュラムでは、コンピューター アーキテクチャ、C プログラミング、ミューテックス、セマフォ、ポインターなどの概念が取り上げられることがよくあります。しかし、これらの概念を実際に適用することは、多くのプログラマーにとって依然として難しい場合があります。 たとえば、CPU コアの使用率を理解することは、多くの場合理論的なものにとどまります。

このコースでは、同時プログラミングおよび並列プログラミングを簡素化する強力なツールである unsync ライブラリに焦点を当てます。 unsync は、async、スレッド化、およびマルチプロセッシングを 1 つの 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 機能: ノンブロッキング I/O に aiohttp を利用して、データを非同期的にダウンロードします。 Web スクレイピングと同時 API 呼び出しに最適です。
  3. download_some_more 機能: 別のスレッドで同期リクエストを使用します。これは、ノンブロッキング I/O を使用せずに同時実行性を必要とする単純なシナリオに適しています。
  4. wait_some 機能: 非同期遅延をシミュレートし、他のタスクが並行して進行できるようにします。 外部イベントの待機を伴うタスクに役立ちます。

重要な学習ポイント

このスクリプトは、同時プログラミングの利点を強調しています。つまり、タスクの同時実行により、処理が高速化され、リソースの使用効率が向上します。


効率的なアプリケーション開発には、メモリ (RAM) と処理能力 (CPU) の間の相互作用を理解する必要があります。 RAM はデータへの高速アクセスを提供し、CPU が命令を実行している間、スムーズなマルチタスクを可能にします。 大規模なデータセットや複数の操作を処理するには適切なメモリが不可欠ですが、強力な CPU により高速な計算と応答性の高いアプリケーションが保証されます。 この関係を理解することは、最適化と効率的なタスク管理にとって不可欠であり、複雑なタスクを処理できる高性能アプリケーションにつながります。


写真:アレクサンダー・コバレフ

以上がこの小さな Python スクリプトにより、低レベル プログラミングの理解が向上しましたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。