2011-07-22 12 views
5

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() 
+1

Muéstranos el código para que podamos ver cuando los archivos se cierran, etc. – agf

+0

@agf. Gracias por la ayuda. Es muy largo poner aquí la idea básica. – Ogan

+1

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

Respuesta

0

Para cambiar el límite de archivos abiertos número en Yosemite (OS X 10.10):

sudo launchctl limit maxfiles [number-of-files] unlimited 
Cuestiones relacionadas