Hogyan javíthatja Python kódját egyidejűséggel és párhuzamossággal

Kulcs elvitelek

  • A párhuzamosság és a párhuzamosság a számítási feladatok végrehajtásának alapelvei, és mindegyiknek megvannak a maga sajátosságai.
  • A párhuzamosság lehetővé teszi az erőforrások hatékony kihasználását és az alkalmazások jobb válaszkészségét, míg a párhuzamosság kulcsfontosságú az optimális teljesítmény és méretezhetőség szempontjából.
  • A Python lehetőségeket biztosít a párhuzamosság kezelésére, mint például a szálfűzés és az aszinkron programozás asyncioval, valamint a párhuzamosság a többfeldolgozó modul használatával.

A párhuzamosság és a párhuzamosság két olyan technika, amely lehetővé teszi több program egyidejű futtatását. A Python számos lehetőséget kínál a feladatok egyidejű és párhuzamos kezelésére, ami zavaró lehet.

Fedezze fel a rendelkezésre álló eszközöket és könyvtárakat a párhuzamosság és párhuzamosság Pythonban való megfelelő megvalósításához, és hogy miben különböznek egymástól.

Az egyidejűség és a párhuzamosság megértése

A párhuzamosság és a párhuzamosság a számítási feladatok végrehajtásának két alapelvére utal. Mindegyiknek megvannak a sajátosságai.

  • A párhuzamosság egy program azon képessége, hogy egyszerre több feladatot kezeljen anélkül, hogy azokat pontosan ugyanabban az időben hajtaná végre. A feladatok egymásba ágyazásának gondolata körül forog, a közöttük olyan módon történő váltás, amely egyszerre jelenik meg.
  • A párhuzamosság viszont azt jelenti, hogy több feladatot valóban párhuzamosan kell végrehajtani. Általában több CPU magot vagy processzort használ ki. A párhuzamosság valódi egyidejű végrehajtást tesz lehetővé, lehetővé téve a feladatok gyorsabb végrehajtását, és kiválóan alkalmas a számításigényes műveletekhez.
  •   Hogyan regisztrálhatok a Talkatone-ra

    Az egyidejűség és a párhuzamosság jelentősége

    A párhuzamosság és a párhuzamosság szükségességét a számítástechnikában nem lehet túlhangsúlyozni. Ezért fontosak ezek a technikák:

  • Erőforrás-kihasználás: A párhuzamosság lehetővé teszi a rendszererőforrások hatékony kihasználását, biztosítva, hogy a feladatok aktívan haladjanak előre, ahelyett, hogy tétlenül várnának a külső erőforrásokra.
  • Válaszképesség: A párhuzamosság javíthatja az alkalmazások válaszkészségét, különösen a felhasználói felületeket vagy webszervereket érintő forgatókönyvekben.
  • Teljesítmény: A párhuzamosság kulcsfontosságú az optimális teljesítmény eléréséhez, különösen a CPU-hoz kötött feladatoknál, mint például az összetett számítások, adatfeldolgozás és szimulációk.
  • Skálázhatóság: A párhuzamosság és a párhuzamosság egyaránt elengedhetetlen a méretezhető rendszerek felépítéséhez.
  • Jövőbiztosság: Mivel a hardvertrendek továbbra is a többmagos processzorokat részesítik előnyben, a párhuzamosság kihasználásának képessége egyre szükségesebbé válik.
  • Párhuzamosság Pythonban

    Egyidejűséget érhet el a Pythonban a szálfűzéssel és az aszinkron programozással az asyncio könyvtárral.

    Threading Pythonban

    A Threading egy Python párhuzamossági mechanizmus, amely lehetővé teszi feladatok létrehozását és kezelését egyetlen folyamaton belül. A szálak bizonyos típusú feladatokhoz alkalmasak, különösen azokhoz, amelyek I/O-kötöttek, és előnyösek lehetnek a párhuzamos végrehajtásból.

    Python szálfűző modulja magas szintű felületet biztosít a szálak létrehozásához és kezeléséhez. Míg a GIL (Global Interpreter Lock) korlátozza a szálakat a valódi párhuzamosság szempontjából, a feladatok hatékony interleavelésével mégis képesek párhuzamosságot elérni.

    Az alábbi kód példát mutat be a szálak használatával történő párhuzamosság megvalósítására. A Python kéréskönyvtárat használja egy HTTP-kérelem küldésére, amely egy gyakori I/O blokkoló feladat. Az időmodult is használja a végrehajtási idő kiszámításához.

     import requests
    import time
    import threading

    urls = [
        'https://www.google.com',
        'https://www.wikipedia.org',
        'https://www.makeuseof.com',
    ]


    def download_url(url):
        response = requests.get(url)
        print(f"Downloaded {url} - Status Code: {response.status_code}")


    start_time = time.time()

    for url in urls:
        download_url(url)

    end_time = time.time()
    print(f"Sequential download took {end_time - start_time:.2f} seconds\n")


    start_time = time.time()
    threads = []

    for url in urls:
        thread = threading.Thread(target=download_url, args=(url,))
        thread.start()
        threads.append(thread)


    for thread in threads:
        thread.join()

    end_time = time.time()
    print(f"Threaded download took {end_time - start_time:.2f} seconds")

    A program futtatásakor látnia kell, mennyivel gyorsabbak a szálas kérések, mint a szekvenciális kérések. Bár a különbség csak a másodperc töredéke, világosan érzékelheti a teljesítménynövekedést, ha szálakat használ I/O-kötött feladatokhoz.

      9 legjobb MP4-GIF konverter

    Aszinkron programozás Asyncioval

    asyncio eseményhurkot biztosít, amely korutinoknak nevezett aszinkron feladatokat kezel. A korutinok olyan funkciók, amelyeket szüneteltethet és folytathat, így ideálisak I/O-hoz kötött feladatokhoz. A könyvtár különösen hasznos olyan helyzetekben, amikor a feladatok külső erőforrásokra, például hálózati kérésekre várnak.

    Módosíthatja az előző kérés-küldési példát, hogy az asyncioval működjön:

     import asyncio
    import aiohttp
    import time

    urls = [
        'https://www.google.com',
        'https://www.wikipedia.org',
        'https://www.makeuseof.com',
    ]


    async def download_url(url):
        async with aiohttp.ClientSession() as session:
            async with session.get(url) as response:
                content = await response.text()
                print(f"Downloaded {url} - Status Code: {response.status}")


    async def main():
        
        tasks = [download_url(url) for url in urls]

        
        await asyncio.gather(*tasks)

    start_time = time.time()


    asyncio.run(main())

    end_time = time.time()

    print(f"Asyncio download took {end_time - start_time:.2f} seconds")

    A kód használatával párhuzamosan tölthet le weboldalakat az asyncio használatával, és kihasználhatja az aszinkron I/O műveletek előnyeit. Ez hatékonyabb lehet, mint az I/O-hoz kötött feladatok szálfűzése.

      10 legjobb adattároló meghajtó személyes és professzionális használatra

    Párhuzamosság a Pythonban

    A párhuzamosságot a segítségével valósíthatja meg A Python többfeldolgozó moduljaamely lehetővé teszi a többmagos processzorok teljes kihasználását.

    Többszörös feldolgozás Pythonban

    A Python többfeldolgozó modulja lehetőséget biztosít a párhuzamosság elérésére különálló folyamatok létrehozásával, amelyek mindegyike saját Python értelmezővel és memóriaterülettel rendelkezik. Ez hatékonyan megkerüli a Global Interpreter Lock (GIL) funkciót, így alkalmas a CPU-hoz kötött feladatokra.

     import requests
    import multiprocessing
    import time

    urls = [
        'https://www.google.com',
        'https://www.wikipedia.org',
        'https://www.makeuseof.com',
    ]


    def download_url(url):
        response = requests.get(url)
        print(f"Downloaded {url} - Status Code: {response.status_code}")

    def main():
        
        num_processes = len(urls)
        pool = multiprocessing.Pool(processes=num_processes)

        start_time = time.time()
        pool.map(download_url, urls)
        end_time = time.time()

        
        pool.close()
        pool.join()

        print(f"Multiprocessing download took {end_time-start_time:.2f} seconds")

    main()

    Ebben a példában a többfeldolgozás több folyamatot eredményez, lehetővé téve a download_url függvény párhuzamos futtatását.

    Mikor kell használni a párhuzamosságot vagy a párhuzamosságot?

    Az egyidejűség és a párhuzamosság közötti választás a feladatok természetétől és a rendelkezésre álló hardvererőforrásoktól függ.

    Használhatja a párhuzamosságot, amikor I/O-hoz kötött feladatokat hajt végre, mint például fájlok olvasása és írása vagy hálózati kérések, és amikor a memóriakorlátozás aggodalomra ad okot.

    Használja a többfeldolgozást, ha olyan CPU-hoz kötött feladatai vannak, amelyek profitálhatnak a valódi párhuzamosságból, és ha a feladatok között robusztus elkülönülés van, ahol az egyik feladat hibája nem érintheti a többit.

    Használja ki az egyidejűséget és a párhuzamosságot

    A párhuzamosság és a párhuzamosság hatékony módja a Python-kód válaszkészségének és teljesítményének javításának. Fontos megérteni e fogalmak közötti különbségeket, és kiválasztani a leghatékonyabb stratégiát.

    A Python kínálja azokat az eszközöket és modulokat, amelyekre szükség van a kód hatékonyabbá tételéhez párhuzamosság vagy párhuzamosság révén, függetlenül attól, hogy CPU-hoz vagy I/O-hoz kötött folyamatokkal dolgozik.