Python multiprocessing pula

Python multiprocessing pula
Wdrożenie dwóch lub jeszcze więcej centralnych jednostek przetwarzania w całym systemie procesora jest znane jako wieloprocesowe. Funkcjonalność systemu może być znacznie ulepszona poprzez wieloprocesowe. Python wykorzystuje tylko jedną centralną jednostkę przetwarzającą z powodu GIL. W przeciwieństwie do języka C lub Java, które natychmiast wykorzystują multiprocessing. Jest to wtyczka, która umożliwia tylko jedno proces działanie jednocześnie. Pakiet wieloprocesowy w Pythonie może zatem rozwiązać ten problem. W tej jednostce istnieją dwa tryby, które obejmują proces i pulę. Mogą pomóc nam jednocześnie wykonać określoną część kodu.

Składnia funkcji puli ():

Już w klasie procesowej skonstruowalibyśmy procedury. Chociaż klasa basenu wydaje się bardziej przydatna, ponieważ możemy sobie z tym poradzić dynamicznie. Aby skonstruować obiekt basenowy, użyj składni:

Każdy parametr jest opcjonalny. „Initargs” jest trzecim parametrem przekazanym do metody, zostanie również podany drugi parametr „inicjalizatora”, który jest używany do inicjalizacji. „Maxtasksperchild” oznacza całkowitą liczbę operacji, które podano każdy proces dziecięcy. Proces zostałby zaktualizowany o nową procedurę pracowników po zakończeniu operacji.

Omówmy dalszą pulę wieloprocesową:

Przykład nr 1:
Rzućmy okiem na poniższą ilustrację, która oblicza kwadrat liczby całkowitej i śpi kod przez jeden sekundę.

czas importu
z wieloprocesowej puli importu
def Square (a):
drukuj (f "tutaj zaczyna się proces: a")
kwadrat = a * a
print (f "kwadrat a: kwadrat")
czas.sen (1)
wydrukuj (f "eeHe proces kończy się: a")
Jeśli __name__ == "__main__":
start_t = czas.czas()
pula = pula ()
basen.Mapa (kwadrat, zakres (0, 9))
basen.zamknąć()
end_t = czas.czas()
print (f "Całkowity czas to end_t-start_t sekundy")

Na początku kodu musimy zaimportować moduł czasowy i moduł puli. Biblioteka puli zostanie zintegrowana z multiprocessing. Definiujemy funkcję kwadrat (). Następnie wykorzystujemy metodę print (), aby pokazać wiadomość „Tutaj zaczyna się proces”. Tutaj otrzymujemy kwadrat liczby, mnożąc liczbę ze sobą. Jeszcze raz wywołujemy funkcję print (), aby pokazać kwadrat zdefiniowanego numeru. Definiujemy funkcję sleep (), aby ustawić ramy czasowe kodu.

Teraz instrukcja drukowania drukuje linię, która pokazuje, że proces został zakończony. Zacznijmy od ciała głównej funkcji. Wzywamy metodę czasu () czasu modułu. Konstruujemy element klasy puli. Metoda, którą chcielibyśmy powtórzyć, i podano iterację, została dostarczona jako parametry metody map ().

Dodatkowo akceptuje dodatkowy parametr „fragmentu”, który dzieli iteracją na segmenty o równych rozmiarach i otrzymuje ten jako odrębny. Parametr do metody map () jest stosowany jako zakres. Aby odmówić nowych operacji, skorzystaj z puli.Metoda blisko ().

Przykład nr 2:
W tym przypadku ustawiamy ramkę danych kodu na 2 sekundy za pomocą metody sleep ().

czas importu
z wieloprocesowej puli importu
def Square (a):
drukuj (f "proces zaczyna się teraz a")
kwadrat = a * a
czas.sen (2)
drukuj (f "proces kończy się teraz a")
Powrót kwadrat
Jeśli __name__ == "__main__":
pula = pula ()
x = pula.Mapa (kwadrat, zakres (0, 7))
Drukuj (x)

Pakiet czasowy i pakiet puli muszą być importowane na początku programu. Multiprocessing zostanie włączony do biblioteki puli. Metoda Square () jest zdefiniowana. Wiadomość „Proces zaczyna się teraz” jest następnie wyświetlany przy użyciu funkcji print (). Mnożąc wartości razem, możemy uzyskać kwadrat liczby w tym scenariuszu.

Aby ustawić czas kodu, wywołujemy metodę Sleep (). Ponadto polecenie wydruku wyświetla wiersz wskazujący, że proces się skończył. W ramach głównej funkcji wywołamy metodę puli (). Mapa funkcji () została użyta w następnym wierszu. Ta funkcja zawiera dwa parametry. Pierwszy argument pokazuje kwadrat liczby. A drugi parametr używa metody Range ().

Definiujemy niższe i wyższe limity w funkcji zakresu (). Ostatecznie dzwoniliśmy do Print (), aby pokazać wynik.

Przykład nr 3:
Niezwykle podobny do basenu.Funkcja map () to pula.imap (). Rozróżnienie polega na tym, że wynik każdego elementu jest podawany tak natychmiast, jak jest przetwarzany, zamiast czekać na zakończenie wszystkich elementów. Dodatkowo iterable jest przekształcane w zestaw przez funkcję map (). Technika IMAP () nie robi tego.

czas importu
z wieloprocesowej puli importu
Def Square (x1):
print (f "sthe proces się uruchomił x1")
kwadrat = x1 * x1
czas.sen (9)
print (f "Proces zakończył się x1")
Powrót kwadrat
Jeśli __name__ == "__main__":
pula = pula ()
x2 = pula.IMAP (kwadrat, zakres (0, 4))
dla J in x2:
print (f "wynik jest tutaj j")

Po pierwsze, musimy uwzględnić ramy czasu i puli. Bierzemy bibliotekę puli z pakietu wieloprocesowego. Nazywamy funkcję kwadratu (). Ta funkcja zawiera wymaganą liczbę jako jej argument. Aby wyświetlić komunikat wskazujący, że proces się rozpoczął, wywołyliśmy funkcję print (). Mnożąc wartości razem w tym przypadku, możemy uzyskać kwadrat określonej liczby. Aby określić czas kodu, wywoływamy metodę snu (). Stwierdzenie wskazujące, że proces zakończył się, został wydrukowany przez funkcję drukowania. Kwadrat określonej liczby całkowitej jest następnie zwracany przez funkcję.

Zacznijmy teraz ciało głównej funkcji. Funkcja puli () będzie używana. Następny wiersz wykorzystuje metodę Map (). Istnieją dwa parametry dla tej metody. Kwadrat liczby całkowitej jest dostarczany jako pierwszy parametr. Funkcja Range () jest używana jako drugi argument. W ramach metody zakresu () określono dolne i górne ograniczenia. Przed zakończeniem kodu będziemy używać „do„ dla ”pętli. Zainicjujemy zmienną pętli. Ta pętla iteruje się, dopóki dany warunek nie zostanie spełniony. Następnie stosuje się metodę print (), aby reprezentować wynik.

Wniosek

W tym przewodniku rozmawialiśmy o wieloprocesowej puli Pythona. Gdy wiele procesów musi działać jednocześnie lub musiałaby zostać przyspieszona, multiprocessing jest niezbędny. Gdy proces działa na jednym wątku, jego możliwości są ograniczone; W przeciwnym razie rozciągałoby to macki przez liczne wątki. Python oferuje prosty interfejs do wdrożenia multiprocessingu, jeśli czasochłonna operacja może wykonywać jednocześnie, a cały system obsługuje wiele architektur procesorów. Wykonaliśmy trzy instancje, w których ustawiliśmy ramy czasowe kodu.