Gemeinsame Sperren zwischen Python-Prozessen
Beim Versuch, eine Sperre zwischen mehreren Prozessen zu verwenden, kann die Fehlermeldung „Objekte sollten nur gesperrt werden“ auftreten durch Vererbung zwischen Prozessen geteilt werden.“
Um dieses Problem zu lösen, gibt es zwei Hauptansätze:
Verwenden eines Managers
Dieser Ansatz beinhaltet die Erstellung eines Manager-Objekt und Übergabe eines Manager.Lock():
from multiprocessing import Manager ... m = Manager() l = m.Lock()
Die Verwendung eines Managers führt jedoch dazu, dass ein zusätzlicher Prozess erforderlich ist, um den Manager-Server zu hosten und über IPC zu kommunizieren.
Übergabe der Sperre am Pool Erstellung
Eine alternative Methode besteht darin, das reguläre multiprocessing.Lock() zum Zeitpunkt der Poolerstellung mit dem Initialisierungsschlüsselwortargument zu übergeben:
def init(l): global lock lock = l l = multiprocessing.Lock() pool = multiprocessing.Pool(initializer=init, initargs=(l,))
Diese Methode macht die Sperrinstanz in allen untergeordneten Workern global. Beachten Sie, dass dieser Ansatz die Teilfunktion überflüssig macht.
Durch den Einsatz einer dieser Techniken können Sie Sperren effektiv zwischen Python-Prozessen teilen und so einen koordinierten Zugriff auf gemeinsam genutzte Ressourcen ermöglichen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3