Bei Verwendung von Multiprocessing unter Windows scheint es, dass offene Dateihandles von erzeugten Prozessen vererbt werden. Dies hat den unangenehmen Nebeneffekt, sie zu verriegeln.Dateihandlevererbung in Multiprocessing-Lib verhindern
Ich habe Interesse an entweder:
1) Verhindern die Vererbung
2) eine Möglichkeit, die Datei aus dem erzeugten Prozess zur Freigabe
den folgenden Code betrachten, die auf OSX, aber stürzt auf Windows funktioniert gut bei os.rename
from multiprocessing import Process
import os
kFileA = "a.txt"
kFileB = "b.txt"
def emptyProcess():
while 1:
pass
def main():
# Open a file and write a message
testFile = open(kFileA, 'a')
testFile.write("Message One\n")
# Spawn a process
p = Process(target=emptyProcess)
p.start()
# Close the file
testFile.close()
# This will crash
# WindowsError: [Error 32] The process cannot access the file
# because it is being used by another process
os.rename(kFileA, kFileB)
testFile = open(kFileA, 'a')
testFile.write("Message Two\n")
testFile.close()
p.terminate()
if __name__ == "__main__":
main()
Wie erhält man das Dateihandle von etwas, das mit open(), nicht os.open() erstellt wurde? – 14256424