2010-05-27 5 views
0

Я пытаюсь вручную создать дескриптор файла, связанный с сокетом в python, а затем загружать непосредственно в память с помощью mmap. Создать файл в памяти с помощью mmap просто, но я не могу найти способ связать файл с сокетом.изменить файловый дескриптор для сокета в python


Спасибо за ваши ответы.

Проблема у меня есть, я не могу сделать больше из нескольких сокетов для python (или операционной системы). Я получаю ошибку: «[errno 24] Слишком много открытых файлов».

Я думаю, что ошибка связана с тем, что я не могу создать больше дескрипторов файлов на диске, поэтому я хочу их создать в памяти. Чтобы избежать этого ограничения.

Любые предложения?

ответ

1

Почему вы хотите загрузить это в память с помощью mmap? Если вы используете unix-вариант, вы можете создать unix-сокет, который является файловым дескриптором, который может использоваться как любой другой сокет. Сокет и файл с отображением памяти представляют собой два разных объекта - вероятно, не стоит пытаться их смешивать.

Возможно, было бы полезно сделать шаг назад и обсудить, что вы пытаетесь сделать на более высоком уровне.

0

Существует хороший шанс, что я неверно истолковал ваш вопрос. Вы говорите, что существует существующий файл сокета, для которого вы хотели бы создать объект сокета Python? Если это так, socket.fromfd() будет дублировать fd и создать объект сокета.

http://docs.python.org/library/socket.html#socket.fromfd

редактировать для решения пост Дани

Я думаю, что вы поняли, насколько файловые дескрипторы работы. Существует ограничение, установленное ОС. Это не имеет никакого отношения к тому, что указывают FD, поэтому mmap не поможет вам здесь (сокеты не находятся на диске ни btw). Вероятно, вам просто нужно улучшить управление файлами - закройте файлы, когда вы с ними закончите.

В случае, если у вас есть только действительно, требующие требований, вам может потребоваться увеличить лимит на открытых FD. Этот blog post имеет отличный пример использования модуля resource (только для NIX), чтобы получить и установить ограничение на открытие файла. У пользователя getrlimit man page дополнительную информацию об этом.

Смежные вопросы