Hva er et rør i Python?
Prosessen som viderefører denne informasjonen skriver til røret, mens prosessen som mottar denne informasjonen leser fra røret. Akkurat som andre programmeringsspråk støtter Python også implementering av rør.
Hvorfor skal jeg bruke et rør i Python?
Vi vet alle at kommunikasjon mellom prosesser er et veldig viktig programmeringskonsept. Siden begrepet parallell prosessering ble introdusert, har funksjonaliteten og kraften til datamaskiner utvidet seg i veldig stor grad. Dette konseptet tillot oss å kjøre flere prosesser om gangen som kan fungere uavhengig. Imidlertid ønsker vi noen ganger en prosess for å formidle litt informasjon til en annen som trenger videre behandling. Det er her rørene i Python kommer godt med.
Et rør i Python kan enkelt brukes til å overføre informasjon fra den ene enden til en annen. Dette gjør at to prosesser kan utveksle data med hverandre veldig praktisk. Det eneste som er nødvendig for å bli tatt vare på mens du implementerer rør i Python eller, for den saks skyld, på noe annet programmeringsspråk er at når en prosess er å skrive til røret, må den lese filbeskrivelsen blokkeres. Tilsvarende, når en prosess leser fra røret, bør skrivefilbeskrivelsen blokkeres. Dette gjøres for å sikre dataintegritet og at dataene synkroniseres mellom lese- og skriveprosessene.
For å kaste ytterligere lys over implementeringen av rør i Python, bør du gå gjennom følgende eksempel som vi har formulert for at du skal lære bruken av rør i Python effektivt.
Merk: Du kan bruke Spyder IDE til å implementere et program i Python ved å bruke enten Windows 10 eller hvilken som helst distribusjon av Linux; Imidlertid “OS.gaffel () ”-funksjon som brukes i følgende eksempel støttes bare av Linux. Derfor vil du ikke kunne implementere følgende kode i Windows 10.
Eksempel på å bruke et rør i Python:
For å skildre bruken av et rør i Python, ønsket vi å implementere en kode som er i stand til å muliggjøre kommunikasjon mellom en overordnet prosess og en barneprosess ved å bruke et rør. For å lette slik kommunikasjon, må du se på følgende kode:
I denne Python -koden for implementering av rør har vi først importert Pythons “OS” -modul, som vil lette denne implementeringen. Da har vi laget et rør med “OS.Pipe () ”-funksjon og har tildelt den til de to filbeskrivelsene“ R ”og“ W ”for å lese og skrive data. Etter det ønsket vi å gyte en barneprosess med prosess -ID, jeg.e., PID som kan gjøres ved hjelp av “OS.gaffel () ”-funksjon. Deretter har vi en "if" uttalelse som opererer på PID større enn "0" i.e., Hvis PID er den til en overordnet prosess, vil først denne "hvis" -blokken bli utført. Innenfor denne "hvis" -blokken, blokkerer foreldreprosessen først "Les" -filbeskrivelsen, i.e., r, slik at overordnet prosess enkelt kan skrive til røret uten noen avbrudd. Dette gjøres ved å bruke “OS.Lukk (r) ”-funksjon.
Etter det ønsket vi å varsle brukeren gjennom konsollen om at overordnede prosessen nå skriver til røret som vi har vist en melding ved hjelp av “Print” -kommandoen. Deretter har vi en "tekst" -variabel som vi har tildelt teksten som overordnede prosessen ønsker å skrive til røret.
Etter det har vi kalt “OS.skriv () ”-funksjon. Denne funksjonen godtar to argumenter, jeg.e., Skrivfilbeskrivelsen og teksten som skal skrives til røret. Når denne funksjonen heter, blir teksten automatisk skrevet til røret. Etter det ønsket vi å vise teksten skrevet på røret på konsollen vår, noe vi vil gjøre med hjelp av "Print" -funksjonen ved å avkode tekstvariabelen.
Deretter er det en "annet" uttalelse som vil fungere hvis PID ikke er større enn "0" i.e., PID er en barneprosess; Først da blir denne "ellers" -blokken utført. Innenfor denne "ellers" blokkeringen blokkerer barneprosessen først "skriv" filbeskrivelsen, i.e., w, for enkelt å lese teksten skrevet på røret uten endringer. Dette gjøres ved å bruke “OS.Lukk (w) ”-funksjon.
Etter det ønsket vi å varsle brukeren gjennom konsollen om at barneprosessen nå leser fra røret som vi har vist en melding ved hjelp av “Print” -kommandoen. Deretter har vi tildelt verdien av den åpnede lesefilbeskrivelsen “R” til vår opprinnelig erklærte Lesfilbeskrivelse. Til slutt ønsket vi å vise teksten som ble lest fra røret av vår barneprosess på konsollen vår ved å bruke "Print" -funksjonen. Etter å ha skrevet denne Python -koden i Spyder IDE, har vi ganske enkelt lagret den og deretter utført den.
Når denne koden ble utført, viste dens utdata seg å bli noe vist på bildet nedenfor:
I denne utgangen kan du se at den første meldingen som dukket opp på konsollen var "foreldreprosess skriver:" som innebærer at for øyeblikket er den leste filbeskrivelsen blokkert som foreldreprosessen skriver til røret. Den andre meldingen som dukket opp på konsollen var “Skrevet tekst: Velkommen barnet mitt!”Som representerer teksten skrevet til røret av overordnet prosess. Deretter lyder den tredje meldingen som ble vist i utdataene "barneprosess:" som innebærer at skrivefilbeskrivelsen er blokkert for øyeblikket, da barneprosessen leser fra røret. Til slutt var den fjerde meldingen som ble vist på konsollen “Les tekst: Velkommen til barnet mitt!”Som ganske enkelt representerer teksten som ble lest fra røret av barneprosessen.
På denne måten kan du jobbe med rør i Python og skape enda mer komplekse eksempler der du kan skildre en fullverdig kommunikasjon mellom foreldre- og barneprosesser.
Konklusjon:
Vi snakket kort om rørene i Python i begynnelsen av denne artikkelen. Så gikk vi litt lenger ved å forklare hvordan de fungerer og hvorfor vi skulle bruke dem i utgangspunktet. Etter det forklarte vi hvordan rørene kunne implementeres i Python ved hjelp av et nyttig eksempel der en prosess formidler litt informasjon til en annen. Når du har gått gjennom dette eksemplet, vil du raskt forstå hvordan rør implementeres i Python, og da vil du kunne implementere mer komplekse programmer der to prosesser kommuniserer med hverandre.