„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > So teilen Sie Sperren zwischen Python-Prozessen

So teilen Sie Sperren zwischen Python-Prozessen

Veröffentlicht am 08.11.2024
Durchsuche:280

How to Share Locks Between Python Processes

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.

Freigabeerklärung Dieser Artikel wird unter folgender Adresse abgedruckt: 1729132333 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

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