Czym jest fajka w Pythonie?
Proces, który przechodzi te informacje, zapisuje do rury, podczas gdy proces, który otrzymuje te informacje, odczytuje z rury. Podobnie jak inne języki programowania, Python obsługuje również implementację rur.
Dlaczego miałbym używać rur w Pythonie?
Wszyscy wiemy, że komunikacja między procesami jest bardzo ważną koncepcją programowania. Od czasu wprowadzenia koncepcji równoległego przetwarzania funkcjonalność i moc komputerów rozszerzyły się w bardzo dużym stopniu. Ta koncepcja pozwoliła nam uruchomić wiele procesów jednocześnie, które mogą działać niezależnie. Czasami jednak chcemy, aby jeden proces przekazał pewne informacje do drugiego, które wymagają dalszego przetwarzania. Tutaj przydają się rury w Pythonie.
Rurę w Pythonie można łatwo wykorzystać do przesyłania informacji z jednego końca do drugiego. Umożliwia to dwa procesy na bardzo wygodne wymiany danych. Jedyną rzeczą, którą należy zająć podczas wdrażania rur w Pythonie lub, w każdym innym języku programowania, jest to, że po zapisaniu procesu do rury deskryptor pliku odczytu musi zostać zablokowany. Podobnie, gdy proces odczytuje z rury, deskryptor pliku zapisu powinien zostać zablokowany. Odbywa się to w celu zapewnienia integralności danych i że dane są zsynchronizowane między procesami czytania i pisania.
Aby rzucić dalsze światło na implementację rur w Pythonie, powinieneś przejrzeć poniższy przykład, który sformułowaliśmy, aby skutecznie poznawać rury w Python.
Uwaga: Możesz użyć Spyder IDE do wdrożenia programu w Python za pomocą systemu Windows 10 lub dowolnego rozkładu Linux; Jednak „OS.Funkcja Fork () ”, która jest używana w poniższym przykładzie, jest obsługiwana tylko przez Linux. Dlatego nie będziesz mógł zaimplementować następującego kodu w systemie Windows 10.
Przykład używania rury w Pythonie:
Aby przedstawić wykorzystanie rury w Pythonie, chcieliśmy zaimplementować kod, który jest w stanie umożliwić komunikację między procesem nadrzędnym a procesem dziecka, wykorzystując rurę. Aby ułatwić taką komunikację, będziesz musiał spojrzeć na następujący kod:
W tym kodzie Python do implementacji rur najpierw zaimportowaliśmy moduł „OS” Pythona, który ułatwi tę implementację. Następnie stworzyliśmy fajkę z „OS.Funkcja fajki () ”i przypisał ją do dwóch deskryptorów plików„ r ”i„ w ”odpowiednio do odczytu i pisania danych. Następnie chcieliśmy odrodzić proces dziecka z identyfikatorem procesu, ja.mi., PID, które można zrobić za pomocą „OS.Funkcja widelca () ”. Następnie mamy instrukcję „If”, która działa na PID większym niż „0” i.mi., Jeśli PID jest procesem nadrzędnym, tylko ten blok „jeśli” zostanie wykonany. W tym bloku „jeśli” proces nadrzędny najpierw blokuje deskryptor pliku „odczyt”, i.mi., r, aby proces nadrzędny mógł łatwo zapisać do rury bez żadnych przerw. Odbywa się to poprzez korzystanie z „OS.Funkcja zamknięcia (r) ”.
Następnie chcieliśmy powiadomić użytkownika przez konsolę, że proces nadrzędny pisze teraz do rury, dla której wyświetliśmy wiadomość za pomocą polecenia „Wydrukuj”. Następnie mamy zmienną „tekst”, do której przypisaliśmy tekst, który proces nadrzędny chce napisać do rury.
Potem nazywaliśmy „OS.Funkcja zapisu () ”. Ta funkcja akceptuje dwa argumenty, i.mi., deskryptor pliku zapisu i tekst, który ma zostać zapisany w rurze. Po wywołaniu tej funkcji tekst zostanie automatycznie zapisany do rury. Następnie chcieliśmy wyświetlić tekst napisany na rurze na naszej konsoli, co zrobimy z pomocą funkcji „wydruku”, dekodując zmienną tekstową.
Następnie istnieje stwierdzenie „else”, które zadziała, jeśli PID nie będzie większa niż „0” i.mi., PID to proces dziecka; Tylko wtedy ten blok „else” zostanie wykonany. W ramach tego bloku „inaczej” proces dzieci najpierw blokuje deskryptor pliku „zapisz”, i.mi., w, aby łatwo odczytać tekst napisany na rurze bez żadnych modyfikacji. Odbywa się to poprzez korzystanie z „OS.Funkcja zamknięcia (w) ”.
Następnie chcieliśmy powiadomić użytkownika przez konsolę, że proces dziecka jest teraz czytany z rury, dla której wyświetliśmy wiadomość za pomocą polecenia „Wydrukuj”. Następnie przypisaliśmy wartość otwartego deskryptora pliku odczytu „R” do naszego początkowo zadeklarowanego deskryptora pliku odczytu. Na koniec chcieliśmy wyświetlić tekst odczytany z rury przez nasz proces dziecka na naszej konsoli za pomocą funkcji „wydruku”. Po napisaniu tego kodu Pythona w Spyder IDE, po prostu go zapisaliśmy, a następnie wykonaliśmy.
Po wykonaniu tego kodu jego wyjście okazało się, że jest nieco pokazane na poniższym obrazku:
W tym wyjściu widać, że pierwszą wiadomość, która pojawiła się w konsoli, brzmiał „Proces Process Proces. Drugą wiadomość, która pojawiła się na konsoli, brzmiał: „Pisany tekst: Witaj moje dziecko!”, Który reprezentuje tekst zapisany do rury przez proces nadrzędny. Następnie trzecim komunikatem wyświetlonym w wyjściu było „Proces dziecięcy:”, co oznacza, że deskryptor pliku zapisu jest obecnie blokowany, ponieważ proces dziecka odczytuje z rury. Wreszcie, czwarta wiadomość wyświetlona na konsoli brzmiał: „Przeczytaj tekst: Witaj moje dziecko!„Który po prostu reprezentuje tekst odczytany z rury przez proces dziecięcy.
W ten sposób możesz pracować z rurami w Pythonie i tworzyć jeszcze bardziej złożone przykłady, w których można przedstawić pełnoprawną komunikację między procesami rodzica a dziećmi.
Wniosek:
Na początku tego artykułu rozmawialiśmy krótko o rurach w Pythonie. Potem poszliśmy trochę dalej, wyjaśniając, jak działają i dlaczego powinniśmy ich używać. Następnie wyjaśniliśmy, w jaki sposób rury można wdrożyć w Pythonie za pomocą przydatnego przykładu, w którym jeden proces przekazuje pewne informacje innym. Po przejrzeniu tego przykładu szybko zrozumiesz, w jaki sposób rury są wdrażane w Python, a następnie będziesz mógł wdrożyć bardziej złożone programy, w których dwa procesy komunikują się ze sobą.