изменить дескриптор файла для сокета в Python - PullRequest
0 голосов
/ 27 мая 2010

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


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

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

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

Есть предложения?

Ответы [ 2 ]

1 голос
/ 27 мая 2010

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

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

0 голосов
/ 27 мая 2010

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

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

изменить адрес Дани

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

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

...