|  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 jag effektivt använda körningen för slinga i parallellt python för att optimera exekveringen av min kod?

    Pythons inbyggda "för" -slingan är inte i sig parallelliserbar. För att köra en "för" -slinga parallellt måste du använda bibliotek som är utformade för parallellbehandling. De vanligaste metoderna är att använda "multiprocessing" -modulen eller specialiserade bibliotek som "samtidiga.Futures" och "joblib". Det bästa valet beror på arten av dina uppgifter.

    Här är en uppdelning av hur man parallelliserar en "för" -slinga med dessa metoder, tillsammans med överväganden för optimal effektivitet:

    1. `Multiprocessing`:

    Denna modul ger den mest direkta kontrollen över parallella processer. Det är bäst lämpat när dina sling -iterationer är beräkningsintensiva och oberoende (inga delade minnesberoende).

    `` `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. Exempel:

    resultat =artikel * 2

    avkastningsresultat

    Om __Name__ =='__Main__':# Avgörande för Windows -kompatibilitet

    data =lista (intervall (1000)) # dina data

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

    resultat =pool.map (process_item, data) # applicera process_item på varje objekt i data

    utskrift (resultat)

    `` `

    * `multiprocessing.pool`: Skapar en pool av arbetstagarprocesser. `multiprocessing.cpu_count ()` bestämmer det optimala antalet processer baserat på ditt systems CPU -kärnor. Justera detta nummer om det behövs (t.ex. för hypertrådning).

    * `pool.map`: Tillämpar funktionen "Process_Item" på varje objekt i "Data" iterable och distribuerar arbetet över processerna.

    * `om __Name__ =='__main __':`: Detta är viktigt, särskilt på Windows, för att förhindra rekursiv processskapande som kan leda till kraschar.

    2. `Concurrent.Futures`:

    Denna modul tillhandahåller ett högre gränssnitt på högre nivå än "multiprocessing" som erbjuder både processbaserad och trådbaserad parallellism. Trådar är i allmänhet lättare vikt men är begränsade av den globala tolklåset (GIL) i CPython, vilket gör dem mindre effektiva för CPU-bundna uppgifter.

    `` `python

    importera samtidiga.

    DEF Process_Item (artikel):

    # Samma som tidigare

    resultat =artikel * 2

    avkastningsresultat

    om __name__ =='__main__':

    Data =lista (intervall (1000))

    med samtidiga.futures.processpoolexecutor () som exekutör:# Använd ProcessPoolExecutor för CPU-bundna uppgifter

    resultat =lista (exekutor.map (process_item, data)))

    utskrift (resultat)

    `` `

    * `ProcessPoolExecutor`: Använder processer, lämpliga för CPU-bundna operationer.

    * `ThreadPoolExecutor`: Använder trådar, bättre för I/O-bundna operationer (väntar på nätverksförfrågningar, filläsningar etc.).

    3. `Joblib`:

    `Joblib 'är ett bibliotek som är specifikt designat för parallell datoranvändning i Python. Det används ofta i datavetenskap och maskininlärningssammanhang. Det erbjuder praktiska funktioner och hanterar vissa komplexiteter automatiskt.

    `` `python

    Från joblib importera parallell, försenad

    DEF Process_Item (artikel):

    # Samma som tidigare

    resultat =artikel * 2

    avkastningsresultat

    om __name__ =='__main__':

    Data =lista (intervall (1000))

    resultat =parallell (n_jobs =-1) (försenad (process_item) (artikel) för objekt i data) # n_jobs =-1 använder alla processorer

    utskrift (resultat)

    `` `

    * `parallell (n_jobs =-1)`: Kör uppgifterna parallellt med alla tillgängliga CPU-kärnor (`-1`).

    * `försenad (process_item) (artikel)`: Försenar genomförandet av `Process_Item 'tills den är planerad med` parallell'.

    Effektivitetsöverväganden:

    * overhead: Parallellisering introducerar omkostnader. Om dina enskilda uppgifter är mycket snabba kan omkostnaderna uppväga fördelarna. Experiment för att hitta den optimala balansen.

    * Dataöverföring: Att överföra data mellan processer kan vara långsamma. Minimera mängden som överförs om möjligt.

    * Beroenden: Om dina loop -iterationer beror på varandra (t.ex. en iterations utgång är ingången till nästa) blir parallellisering mycket mer komplex och kanske inte är genomförbar.

    * delade resurser: Undvik åtkomst till delade resurser (filer, databaser) från flera processer samtidigt utan korrekt synkroniseringsmekanismer (lås, semaforer), eftersom det kan leda till rasförhållanden och datakorruption.

    * Antal processer: Det optimala antalet processer är vanligtvis nära antalet CPU -kärnor, men det kan variera beroende på uppgiften och systembelastningen. Experiment är nyckeln.

    Kom ihåg att profilera din kod för att identifiera flaskhalsar och mäta prestandaförbättringen som uppnåtts genom parallellisering. Parallella med delar av din kod som bidrar avsevärt till den totala runtime. Olämplig parallellisering kan faktiskt * minska * prestanda.

    Tidigare:

    nästa:
    relaterade artiklar
    ·Hur du ändrar färg på en Python Boxplot
    ·Hur listfunktionerna i en klass i Python
    ·Hur ta reda på vilken version av Python du har
    ·Hur man programmerar i Python
    ·Hur en Läs textfil i Python
    ·Vad är skillnaden mellan Dot Notation & Arrow Notation…
    ·Hur man gör ett spel i Python Shell
    ·Python Lambda Lista Förståelse
    ·Hur man gör en klocka i Python
    ·Komma åt Python Docstring
    Utvalda artiklarna
    ·Vilka är fördelarna med en Bot
    ·Hur man skapar ett perl Fil
    ·Hur man skapar ett formulär tidningsprenumeration med …
    ·PHP hjälpfunktioner
    ·Vad är vikten av att analysera på datorspråk?
    ·Visual Basic Tutorial
    ·Typer av Horn klausuler i Prolog
    ·Hur man kan begränsa en variabel längd i Javascript
    ·Ställa Java String med Null
    ·Så att studera Visual Basic
    Copyright © Dator Kunskap https://www.dator.xyz