Zamek wieloprocesowy w Python

Zamek wieloprocesowy w Python

Pakiet wieloprocesowy Pythona umożliwia użytkownikom tworzenie nowych procesów i dostęp do API Python. Jeśli kiedykolwiek grałeś z modułem gwintowania, jest to bardzo porównywalne. Konieczne jest wydajność wielu zadań. Musimy zaimportować moduł wieloprocesowy do skryptu Python, aby wykonywać operacje wieloprocesowe. Kiedy dwa procesy lub wątki próbują uzyskać dostęp do udostępnionego zasobu, takich jak pliki pamięci lub inne dane, może to powodować problemy w świecie programowania. Dlatego musimy zabezpieczyć ten dostęp za pomocą zamka. Udostępnianie głównej pamięci i akcesoriów umożliwia jednoczesne uruchamianie programów przetwarzania.

Aplikacja wieloprocesowa dzieli się na mniejsze jednostki i działa osobno. System operacyjny przypisuje procesor do każdego procesu. Aby zapobiec uruchomieniu funkcji równoważnej do momentu zwolnienia blokady, wykorzystujemy klasę blokady wieloprocesowej, aby uzyskać blokadę procesu. Klasa blokady wykonuje przede wszystkim dwie funkcje. Metoda Acquire () służy do pierwszego uzyskania blokady, a funkcja release () służy do uwolnienia blokady.

Wdrożenie Pythona Lock () w multiprocessing

W tym przykładzie konstruujemy blokadę, a następnie używamy modułu wieloprocesowego, aby użyć metody lock () po utworzeniu dwóch procesów. Możemy generować i utrzymywać nowe zadania dziecięce w Pythonie, wykorzystując pakiet wieloprocesowy. Komponent wieloprocesowy ułatwia tworzenie procesów za pomocą interfejsu podobnego do komponentu wątku. Moduł wieloprocesowy obsługuje zarówno lokalną, jak i globalną współbieżność za pomocą poszczególnych części, a nie wątków, eliminując globalną blokadę interpretacyjną. Python ma blokadę Mutex, której można użyć z wieloma procesami jednocześnie.Zamek klasowy. Procesy mogą konstruować, pozyskiwać, a następnie zwolnić obiekt blokowania przed uzyskaniem dostępu do ważnego obszaru.

Zacznijmy wdrażać kod do uruchomienia skryptu wieloprocesowego Pythona. Używa się również „Spyder”. Najpierw importujemy moduł wieloprocesowy. Musimy zaimportować moduł wieloprocesowy, ponieważ musimy utworzyć proces w skrypcie. Następnie budujemy funkcję zdefiniowaną przez użytkownika o nazwie „Funkcja” i przekazujemy do niej argument „Zamknij” w następującym wierszu. Metoda Acquire () jest następnie wywoływana z wyrażeniem „zamka”, która zapewnia autorytet wątku nad zamkiem. Wątek blokuje się, aż drugi wątek upuszczy zamek, jeśli próbuje zdobyć jeden, który jest już utrzymywany przez inny wątek. W tym momencie konkuruje z każdym innym wątkiem, który ma na celu przejęcie zamka. Jeden wątek na raz może mieć tylko zamek. Oświadczenie „Ważna sekcja” jest następnie przekazywana jako dane wejściowe, gdy nazywamy „print ()” w następnym kroku.

Następnie, w kolejnym etapie, ponownie nazywamy funkcję „print ()”, przekazując ją wyrażenie „może być tylko jeden proces na raz” przed wywołaniem funkcji „release ()” z „blokadą”. W ten sposób blokada jest zawsze uwalniana, nawet jeśli występuje błąd lub błąd w kluczowym regionie, wyraźnie określając początek i koniec chronionego kodu.

Teraz, gdy zdefiniowaliśmy funkcję o nazwie „Uruchomienie funkcji”, przechodzimy do następnej fazy, w której tworzymy proces, a następnie nazywamy go za pomocą modułu „Lock ()”. Trzymamy go w parametrze blokady i używamy „multiprocessing.lock () ”, aby wywołać blokadę z procesem. Teraz, gdy stworzyliśmy proces 1, używamy „multiprocessingu.proces ”, aby wywołać funkcję w tym procesie. Przekazujemy również blokadę argumentu do funkcji za pomocą „argU” = „blokada” i przechowywanie procesu 1 w zmiennej „p1”.

Następnie, w poniższym etapie, używamy „multiprocessingu.proces ”, aby uruchomić funkcję w procesie 2 i przejść„ funkcję docelową ”podczas przechowywania jej w zmiennej„ P2 ”. Następnie proces rozpoczyna się przy użyciu funkcji „start ()” z „p1” i „p2”. W następnym kroku używamy „dołącz ()” z „P1” i „P2”, aby poczekać na zakończenie procesu. Następnie stosujemy „if name = main_”, co jest zasadniczo punktem wejściowym. „Funkcja run ()” jest następnie wywoływana na końcu.


Aby to osiągnąć, proces ten musi najpierw uzyskać blokadę przed wykonaniem podstawowej części. Po zakończeniu krytycznej fazy zadania proces musi usunąć blokadę. Zarówno dwa procesy, jak i ich stwierdzenia zostały wyświetlone. Po „sekcji krytycznej może być tylko jedno zadanie."


Mamy teraz kolejny przykład blokady wieloprocesowej Pythona. Zacznijmy od importu „Sleep” z modułu czasu przed zaimportowaniem „losowego” z modułu losowego. Liczby całkowite są generowane losowo przy użyciu programu Python o nazwie Python Random. Ponieważ są one pseudo-lodowate, liczby te nie są naprawdę losowe. Możesz użyć tego pakietu do wykonywania innych losowych operacji, wydrukowania losowego numeru dla listy lub ciągu i generowania liczb losowych.

Następnie importujemy proces z multiprocessing w następującym wierszu. Blokada jest następnie importowana z multiprocessing. Funkcja „FUNC” jest następnie definiowana za pomocą argumentów „Zamkaj”, „Identyfikator” i „Val”. Następnie używamy zamka, aby uzyskać zamek. Ta kluczowa część obejmuje zgłoszenie wiadomości i blokowanie drugiej wiadomości.

W rezultacie wykonujemy metodę print () w zamku, przekazując instrukcję razem z wywołaniami „identyfikator” i „val”. Metoda „sleep ()” służy do zatrzymania wykonania dla ustalonej liczby sekund. Następnie nazywamy „Val” w jego nawiasach. Udostępniony zamek jest ustanowiony za pomocą metody „lock ()” i zapisywany w nowo utworzonej zmiennej „blokuj”, gdy użyjemy warunku „if name = main_”. Następnie używamy metody procesu () do utworzenia procesu, przekazywania „target = func”, aby wywołać funkcję do procesu wraz z argumentem „blokuj”, skonstruowaną liczbę „x” i „losowo ()” funkcjonować. Ta pętla kończy się po zakończeniu „15” iteracji. Zapisujemy ten proces w zmiennej „P”.

Tutaj ustalamy również zakres za pomocą „For” i ustawiamy zakres na „15”. Proces zaczyna się teraz od wywołania „procesu.początek()". Następnie wywołujemy proces metodą „dołącz ()”, aby czekać na wykonanie.


Po wykonaniu przykładu uruchamia się piętnaście procesów i każdy z nich jest skonfigurowany do korzystania z naszej funkcji niestandardowej. Następnie główny proces czeka na zakończenie każdego z procesów dziecka przed ich uruchomieniem. Każdy proces dziecka w metodzie funkcji () próbuje chwycić zamek. Zamek można uzyskać tylko jednym procesem na raz. Kiedy tak się dzieje, wysyłają wiadomość, w tym ich tożsamość i jak długo planują spać, a także indeks jest niezgodny z.

Wniosek

W tym artykule dowiedzieliśmy się o blokadzie wieloprocesowej Pythona. Blokada jest fundamentalną koncepcją w teorii wieloprocesowej i systemu operacyjnego. W pierwszej sekcji przykładu utworzyliśmy dwa procesy za pomocą zamka i nazwaliśmy je za pomocą zamka do wykonania zdefiniowanej funkcji. W poniższej sekcji kodu użyliśmy pętli i ustawiliśmy zakres na „15”, aby wykonać proces. Proces jest zakończony po zakończeniu „15” iteracji. W drugiej sekcji wykorzystaliśmy również technikę „sleep ()”, aby opóźnić wykonanie na chwilę.