Al usar el multiprocesamiento en Windows, parece que los identificadores de archivos abiertos se heredan por procesos generados. Esto tiene el desagradable efecto secundario de bloquearlos.Prevención de la herencia del identificador de archivos en multiprocesamiento lib
estoy interesado en cualquiera de los dos:
1) Prevención de la herencia
2) Una manera de liberar el archivo del proceso generado
considere el siguiente código que funciona muy bien en OSX, pero se bloquea en las ventanas en 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()
¿Cómo se obtiene el identificador de archivo de algo creado con open(), no os.open()? – 14256424