Python Multiprocessing For-Loop

Python Multiprocessing For Loop



Multiprosessering kan sammenlignes med multithreading. Imidlertid skiller det seg ved at vi bare kan kjøre en tråd om gangen på grunn av GIL som brukes for tråding. Multiprosessering er prosessen med å utføre operasjoner sekvensielt på tvers av flere CPU-kjerner. Tråder kan ikke brukes parallelt. Imidlertid lar multiprosessering oss etablere prosessene og kjøre dem samtidig på ulike CPU-kjerner. Løkken, som for-løkken, er et av de mest brukte skriptspråkene. Gjenta det samme arbeidet med forskjellige data til et kriterium, for eksempel et forhåndsbestemt antall iterasjoner, er nådd. Sløyfen utfører hver iterasjon en etter en.

Eksempel 1:  Bruk av For-Loop i Python Multiprocessing Module

I dette eksemplet bruker vi klasseprosessen for-loop og Python multiprosesseringsmodul. Vi begynner med et veldig enkelt eksempel slik at du raskt kan forstå hvordan Python multiprocessing for-loop fungerer. Ved å bruke et grensesnitt som er sammenlignbart med gjengemodulen, pakker multiprosesseringen opprettelsen av prosesser.







Ved å bruke underprosessene i stedet for tråder, gir multiprosesseringspakken både lokal og fjern samtidighet, og unngår dermed Global Interpreter Lock. Bruk en for-løkke, som kan være et strengobjekt eller en tuppel, for kontinuerlig å iterere gjennom en sekvens. Dette fungerer mindre som nøkkelordet sett i andre programmeringsspråk og mer som en iteratormetode som finnes i andre programmeringsspråk. Ved å starte en ny multiprosessering kan du kjøre en for-loop som utfører en prosedyre samtidig.



La oss begynne med å implementere koden for kodekjøring ved å bruke 'spyder'-verktøyet. Vi tror at 'spyder' også er den beste for å kjøre Python. Vi importerer en multiprosesseringsmodulprosess som koden kjører. Multiprosessering i Python-konsept kalt en 'prosessklasse' skaper en ny Python-prosess, gir den en metode for å utføre kode, og gir overordnet applikasjon en måte å administrere utførelsen på. Process-klassen inneholder prosedyrene start() og join(), som begge er avgjørende.



Deretter definerer vi en brukerdefinert funksjon kalt 'func'. Siden det er en brukerdefinert funksjon, gir vi den et valgfritt navn. Inne i kroppen til denne funksjonen sender vi 'emne'-variabelen som et argument og 'matematikk'-verdien. Deretter kaller vi 'print()'-funksjonen, og sender utsagnet 'Navnet på det vanlige emnet er' så vel som dets 'emne'-argument som inneholder verdien. Deretter, i det følgende trinnet, bruker vi 'if name== _main_', som hindrer deg i å kjøre koden når filen importeres som en modul og bare tillater deg å gjøre det når innholdet kjøres som et skript.





Tilstandsdelen du begynner med kan i de fleste tilfeller betraktes som et sted for å gi innholdet som bare skal kjøres når filen kjører som et skript. Deretter bruker vi argumentemnet og lagrer noen verdier i det som er 'vitenskap', 'engelsk' og 'datamaskin'. Prosessen får deretter navnet 'prosess1[]' i det følgende trinnet. Deretter bruker vi 'process(target=func)' for å kalle funksjonen i prosessen. Target brukes til å kalle funksjonen, og vi lagrer denne prosessen i 'P'-variabelen.

Deretter bruker vi 'prosess1' for å kalle 'append()'-funksjonen som legger til et element på slutten av listen som vi har i funksjonen 'func.' Fordi prosessen er lagret i 'P'-variabelen, sender vi 'P' til denne funksjonen som argument. Til slutt bruker vi 'start()'-funksjonen med 'P' for å starte prosessen. Etter det kjører vi metoden på nytt mens vi oppgir 'emne'-argumentet og bruker 'for' i emnet. Deretter, ved å bruke 'prosess1' og 'add()'-metoden en gang til, begynner vi prosessen. Prosessen kjører deretter og utdataene returneres. Prosedyren blir deretter bedt om å avslutte med 'join()'-teknikken. Prosessene som ikke kaller 'join()'-prosedyren vil ikke avsluttes. Et avgjørende poeng er at søkeordparameteren «args» må brukes hvis du ønsker å gi argumenter gjennom prosessen.




Nå kan du se i utdataene at setningen vises først ved å sende verdien for 'matematikk'-faget som vi sender inn i 'func'-funksjonen fordi vi først kaller den ved å bruke 'prosess'-funksjonen. Deretter bruker vi 'append()'-kommandoen for å ha verdier som allerede var i listen som legges til på slutten. Deretter ble 'vitenskap', 'datamaskin' og 'engelsk' presentert. Men som du kan se, er ikke verdiene i riktig rekkefølge. Dette er fordi de gjør det så raskt som prosedyren er ferdig og rapporterer meldingen sin.

Eksempel 2: Konvertering av sekvensiell for-sløyfe til multiprosessering parallell for-sløyfe

I dette eksemplet utføres multiprosesseringsløkkeoppgaven sekvensielt før den konverteres til en parallell for-løkkeoppgave. Du kan bla gjennom sekvenser som en samling eller streng i den rekkefølgen de oppstår ved å bruke for-løkkene.

La oss nå begynne å implementere koden. Først importerer vi 'søvn' fra tidsmodulen. Ved å bruke 'sleep()'-prosedyren i tidsmodulen, kan du suspendere utførelsen av anropstråden så lenge du vil. Deretter bruker vi 'random' fra den tilfeldige modulen, definerer en funksjon med navnet 'func', og sender nøkkelordet 'argu'. Deretter lager vi en tilfeldig verdi ved å bruke 'val' og setter den til 'tilfeldig'. Deretter blokkerer vi i en liten periode ved å bruke 'sleep()'-metoden og sender 'val' som en parameter. Deretter, for å sende en melding, kjører vi 'print()'-metoden, og sender ordene 'ready' og nøkkelordet 'arg' som parameter, samt 'created' og sender verdien ved å bruke 'val'.

Til slutt bruker vi 'flush' og setter den til 'True'. Brukeren kan bestemme om utdata skal bufres eller ikke ved å bruke flush-alternativet i utskriftsfunksjonen til Python. Denne parameterens standardverdi på False indikerer at utdataene ikke vil bli bufret. Utgangen vises som en serie med linjer som følger etter hverandre hvis du setter den til sann. Deretter bruker vi 'if name== main' for å sikre inngangspunktene. Deretter utfører vi jobben sekvensielt. Her setter vi området til '10', som betyr at løkken avsluttes etter 10 iterasjoner. Deretter kaller vi 'print()'-funksjonen, sender den 'ready'-inndatasetningen og bruker alternativet 'flush=True'.


Du kan nå se at når vi kjører koden, fører løkken til at funksjonen kjører '10' ganger. Den itererer gjennom 10 ganger, starter på indeks null og slutter på indeks ni. Hver melding inneholder et oppgavenummer som er et funksjonsnummer som vi sender inn som et 'arg' og et opprettelsesnummer.


Denne sekvensielle sløyfen blir nå transformert til en multiprosesserings parallell for-løkke. Vi bruker samme kode, men vi skal til noen ekstra biblioteker og funksjoner for multiprosessering. Derfor må vi importere prosessen fra multiprosessering, akkurat som vi forklarte tidligere. Deretter lager vi en funksjon kalt 'func' og sender nøkkelordet 'arg' før vi bruker 'val=random' for å få et tilfeldig tall.

Deretter, etter å ha påkalt 'print()'-metoden for å vise en melding og gitt 'val'-parameteren for å utsette en liten periode, bruker vi funksjonen 'if name= main' for å sikre inngangspunktene. Deretter lager vi en prosess og kaller opp funksjonen i prosessen ved å bruke 'prosess' og sender 'target=func'. Deretter sender vi 'func', 'arg', sender verdien 'm', og passerer området '10', som betyr at løkken avslutter funksjonen etter '10' iterasjoner. Deretter starter vi prosessen ved å bruke 'start()'-metoden med 'prosess'. Deretter kaller vi 'join()'-metoden for å vente på utførelse av prosessen og for å fullføre hele prosessen etterpå.


Derfor, når vi kjører koden, kaller funksjonene hovedprosessen og begynner utførelsen. De gjøres imidlertid til alle oppgavene er fullført. Vi kan se det fordi hver oppgave utføres samtidig. Den rapporterer sin melding så snart den er ferdig. Dette betyr at selv om meldingene er ute av drift, slutter løkken etter at alle '10' iterasjoner er fullført.

Konklusjon

Vi dekket Python multiprocessing for-loop i denne artikkelen. Vi presenterte også to illustrasjoner. Den første illustrasjonen viser hvordan du bruker en for-løkke i Pythons løkke-multiprosesseringsbibliotek. Og den andre illustrasjonen viser hvordan du endrer en sekvensiell for-loop til en parallell multiprosessering for-loop. Før vi konstruerer skriptet for Python multiprosessering, må vi importere multiprosesseringsmodulen.