Tengo una secuencia de comandos python que ejecuta multiprocesamiento.Pool para procesar una gran cantidad de archivos por separado. Normalmente tengo un límite de CPU de 8. Mi problema es después de ejecutar un tiempo que siempre aparece "IOError: [Errno 24] Demasiados archivos abiertos". Cada proceso secundario abre algunos archivos para leer solo con file.open(). Estos manejadores de archivos se transfieren a múltiples funciones para recuperar datos. Al final de cada proceso secundario, estos archivos se cierran con file.close(). Probé la declaración con también pero no solucioné el problema. ¿Alguien tiene alguna idea de lo que está mal? Busqué en Google pero no pude encontrar ninguna respuesta. Estoy cerrando los archivos y las funciones están regresando correctamente, así que lo que mantiene a los manejadores de archivos.Demasiados archivos abiertos con multiprocesamiento.Pool
Mis ajustes son Mac 10,5 con Python 2.6
Gracias
Ogan
from custom import func1, func2
# func1 and func2 only seek, read and return values form the file
# however, they do not close the file
import multiprocessing
def Worker(*args):
f1 = open("db1.txt")
f2 = open("db2.txt")
for each in args[1]:
# do many stuff
X = func1(f1)
Y = func2(f2)
f1.close()
f2.close()
return
Data = {1:[2], 2:[3]}
JobP= multiprocessing.Pool(8)
jobP.map_async(Worker, Data.items())
jobP.close()
jobP.join()
Muéstranos el código para que podamos ver cuando los archivos se cierran, etc. – agf
@agf. Gracias por la ayuda. Es muy largo poner aquí la idea básica. – Ogan
Si es demasiado largo para publicar, debe reducirlo al código mínimo para desencadenar el problema, luego publíquelo. Al hacerlo, incluso podrías encontrar el problema tú mismo. – agf