|  Startsida |  Hårdvara |  Nätverk |  Programmering |  Programvara |  Felsökning |  System |   
Programmering
  • C /C + + -programmering
  • Computer Programspråk
  • Delphi Programmering
  • Java Programming
  • JavaScript programmering
  • PHP /MySQL Programmering
  • perl Programmering
  • python Programming
  • Ruby programmering
  • Visual Basics Programmering
  • * Dator Kunskap >> Programmering >> python Programming >> Content

    Hur kan parallellbehandling implementeras i Python med A For Loop?

    Du kan inte direkt parallellisera en standard "för" -slinga i python med bara den inbyggda "för" slingkonstruktionen. Pythons globala tolklås (GIL) förhindrar flera trådar från att utföra Python -bytekoder samtidigt inom en enda process. Detta innebär att verklig parallellism för CPU-bundna uppgifter inom en "för" -slinga är omöjligt med bara gängning.

    Du kan emellertid uppnå parallellitet med multiprocessing, vilket kringgår GIL genom att skapa flera processer. Så här kan du implementera parallellbearbetning i Python med en "för" -slinga och "multiprocessing" -biblioteket:

    Metod 1:Använda `multiprocessing.pool.map` (enklast för många identiska operationer)

    Detta är det enklaste tillvägagångssättet om varje iteration av din slinga utför samma operation på olika data. `Pool.map` distribuerar effektivt arbetet över flera processer.

    `` `python

    importera multiprocessing

    DEF Process_Item (artikel):

    "" "Funktionen som ska köras parallellt för varje objekt." ""

    # Din kod för att behandla ett enda objekt går här

    # ... lite beräkning ...

    Returresultat # Returnera resultatet av beräkningen

    om __name__ =='__main__':# viktigt för Windows -kompatibilitet

    Data =[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # Dina data

    med multiprocessing.pool (processer =multiprocessing.cpu_count ()) som pool:

    resultat =pool.map (process_item, data)

    utskrift (resultat)

    `` `

    Den här koden skapar en pool av arbetarprocesser (lika med antalet CPU -kärnor som standard). `Pool.map` tillämpar` Process_Item` för varje element i `data 'samtidigt och returnerar en lista över resultaten i samma ordning som ingången.

    Metod 2:Använda `multiprocessing.pool.apply_async` (för mer komplexa scenarier eller asynkrona operationer)

    Om din slinga involverar mer komplexa logik eller asynkrona operationer, erbjuder `Apply_Async` mer kontroll.

    `` `python

    importera multiprocessing

    DEF Process_Item (artikel):

    # ... din kod ...

    avkastningsresultat

    om __name__ =='__main__':

    Data =[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    resultat =[]

    med multiprocessing.pool (processer =multiprocessing.cpu_count ()) som pool:

    # Apply_Async Returnerar ett Asyncresult -objekt

    async_results =[pool.apply_async (process_item, (artikel,)) för objekt i data]

    # Få resultaten (blockering tills alla processer är kompletta)

    för async_result i async_results:

    resultat.append (async_result.get ())

    utskrift (resultat)

    `` `

    `Apply_Async` låter dig skicka uppgifter individuellt och hämta resultat senare. Detta är användbart om behandlingstiden för varje objekt varierar betydligt.

    Viktiga överväganden:

    * `om __Name__ =='__main __':`: Detta är avgörande, särskilt på Windows, för att förhindra rekursiv processskapande.

    * Datadelning: Undvik att dela muterbara data direkt mellan processer. Använd tekniker som köer eller rör för kommunikation mellan processer för att förhindra rasförhållanden.

    * overhead: Att skapa och hantera processer har omkostnader. Parallell bearbetning är mest fördelaktigt för beräkningsintensiva uppgifter där behandlingstiden avsevärt överväger omkostnaden.

    * Antal processer: Det optimala antalet processer är ofta lika med antalet CPU -kärnor, men experiment kan behövas.

    Kom ihåg att ersätta `# ... din kod ...` med din faktiska beräkning. Välj den metod som bäst passar strukturen och komplexiteten i din "för" loops verksamhet. För enkla, parallellvänliga operationer är "Pool.map" vanligtvis det föredragna och mest effektiva tillvägagångssättet.

    Tidigare:

    nästa:
    relaterade artiklar
    ·Hur man testar en IP- Range i Python
    ·Så här loggar Time Test Execution i Python
    ·Python Certifiering
    ·Hur man gör en flik i Python
    ·Vad är Python Programmering
    ·Hur du tar bort nollor från listorna i Python
    ·Hur att rensa en Array eller Lista i Python
    ·Så här startar Python Interpreter
    ·Hur man skriver ut i Python utan att ändra Line
    ·Hur man testa om Iterable i Python
    Utvalda artiklarna
    ·Hur bli av dubbletter i MySQL
    ·Hur man gör en Java-applet
    ·Hur man skriver ett formulär med jQuery
    ·Hur Dölj objekt Implementering i C + +
    ·Hur man använder lokala variabler i Python Scripts
    ·Hur Exportera till Access från Visual Basic
    ·Hur Override en Ruby Class
    ·Hur Referens en bild i C + +
    ·Hur man skapar en radbrytning i en E
    ·Hur man använder # include i ASP-filer
    Copyright © Dator Kunskap https://www.dator.xyz