Слишком много файлов открываются с помощью мультипроцессинга. - PullRequest
5 голосов
/ 22 июля 2011

У меня есть сценарий Python, который запускает многопроцессорную работу. Пул для обработки большого количества файлов по отдельности.У меня обычно предел процессора равен 8. Моя проблема заключается в том, что после запуска я всегда получаю «IOError: [Errno 24] Слишком много открытых файлов».Каждый дочерний процесс открывает несколько файлов для чтения только с помощью file.open ().Эти обработчики файлов передаются нескольким функциям для извлечения данных.В конце каждого дочернего процесса эти файлы закрываются с помощью file.close ().Я попытался с утверждением также, но не решил проблему.Есть ли у кого-нибудь идеи, что не так.Я погуглил вокруг, но не смог найти никаких ответов.Я закрываю файлы, и функции возвращаются должным образом, так что держите обработчики файлов вокруг.

Мои настройки - Mac 10.5 с python 2.6

Спасибо

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

Ответы [ 2 ]

0 голосов
/ 24 мая 2015

Чтобы изменить ограничение количества открытых файлов в Yosemite (OS X 10.10):

sudo launchctl limit maxfiles [number-of-files] unlimited
0 голосов
/ 20 апреля 2012

Вероятно, вы ограничены лимитом количества открытых файлов операционной системы. См. Как изменить ограничение на количество открытых файлов в Linux? для получения дополнительной информации. Я лично предпочитаю менять настройки /etc/security/limits.conf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...