Wie erstelle ich globale Sperre / Semaphor mit multiprocessing.pool in Python?

8

Ich möchte den Ressourcenzugriff in Kinderprozessen einschränken. Zum Beispiel - limit Ссылка , disk io , etc .. Wie kann ich erreichen, dass es diesen Basiscode erweitert?

Bitte teilen Sie einige grundlegende Codebeispiele mit.

%Vor%     
Chameleon 22.02.2015, 23:33
quelle

2 Antworten

13

Verwenden Sie beim Erstellen eines Pools die Initialisierungs- und initargs-Argumente, um in allen untergeordneten Prozessen eine globale Definition zu definieren.

Zum Beispiel:

%Vor%

Dieser Code gibt die Zahlen 0-3 in aufsteigender Reihenfolge aus (die Reihenfolge, in der die Jobs gesendet wurden), da er die Sperre verwendet. Kommentiere die with lock: -Zeile aus, um sie in absteigender Reihenfolge auszugeben.

Diese Lösung funktioniert sowohl unter Windows als auch unter Unix. Da sich Prozesse jedoch auf Unix-Systemen ausweiten können, muss Unix nur globale Variablen im Modulbereich deklarieren. Der untergeordnete Prozess erhält eine Kopie des Speichers des übergeordneten Elements, der das noch funktionierende Sperrobjekt enthält. Daher wird der Initialisierer nicht unbedingt benötigt, aber es kann helfen zu dokumentieren, wie der Code arbeiten soll. Wenn Multiprocessing in der Lage ist, Prozesse durch Forking zu erstellen, funktioniert das Folgende auch.

%Vor%     
Dunes 25.02.2015, 14:21
quelle
-1

Verwende einen globalen Semaphor und erwirb ihn, wenn du auf eine Ressource zugreifst. Zum Beispiel:

%Vor%

Dieses Programm beendet jede Sekunde nur zwei Jobs, weil die anderen Threads auf den Semaphor warten.

    
MarcelSimon 04.03.2015 12:28
quelle