Ich versuche, eine partielle Funktion zu verwenden, so dass pool.map() eine Funktion mit mehr als einem Parameter (in diesem Fall ein Lock() Objekt) zielen kann. HierPython sharing eine Sperre zwischen Prozessen
ist Codebeispiel (aus einer Antwort auf eine frühere Anfrage von mir):
from functools import partial
def target(lock, iterable_item):
for item in items:
# Do cool stuff
if (... some condition here ...):
lock.acquire()
# Write to stdout or logfile, etc.
lock.release()
def main():
iterable = [1, 2, 3, 4, 5]
pool = multiprocessing.Pool()
l = multiprocessing.Lock()
func = partial(target, l)
pool.map(func, iterable)
pool.close()
pool.join()
Jedoch, wenn ich diesen Code ausführen, erhalte ich die Fehlermeldung:
Runtime Error: Lock objects should only be shared between processes through inheritance.
Was bin ich hier fehlt? Wie kann ich die Sperre zwischen meinen Teilprozessen teilen?
Es gibt eine andere Frage zu demselben Problem, obwohl ihr bestimmter Fehler anders ist - [Probleme bei der Verwendung einer Sperre mit Multiprocessing.Pool: Beizfehler] (http://stackoverflow.com/questions/17960296/trouble-usinga-a- Lock-with-Multiprocessing-Pool-Beizen-Fehler) –