En utilisant le multitraitement sur les fenêtres, il semble que tous les descripteurs de fichiers ouverts sont hérités par des processus engendrés. Cela a l'effet secondaire désagréable de les verrouiller.Empêcher l'héritage du descripteur de fichiers dans la librairie multitraitement
Je suis intéressé soit:
1) Prévenir l'héritage
2) un moyen de libérer le fichier du processus donné naissance à
Consultez le code suivant qui fonctionne très bien sur Mac OS X, mais se bloque sur les fenêtres à 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()
Comment obtenir le handle de fichier à partir de quelque chose créé avec open(), pas os.open()? – 14256424