在python中更改socket的文件描述符

时间:2010-05-27 15:38:45

标签: python sockets file-descriptor

我正在尝试手动创建与python中的套接字关联的文件描述符,然后使用mmap直接加载到内存中。使用mmap在内存中创建文件很简单,但我找不到将文件与套接字关联的方法。


感谢您的回复。

我遇到的问题是我无法为python(或操作系统)创建更多的套接字我收到错误:“[errno 24]打开的文件过多。”

我认为错误是因为我无法在磁盘上创建更多文件描述符,所以我想在内存中创建它们。为了避免这种限制。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

为什么要使用mmap将其加载到内存中?如果您使用的是unix变体,则可以创建一个unix套接字,它是一个文件描述符,可以像任何其他套接字一样使用。套接字和内存映射文件是两个不同的实体 - 尝试混合它们可能不是一个好主意。

或许退一步讨论你想要在更高层次上做的事情会有所帮助。

答案 1 :(得分:0)

我很有可能在错误解释你的问题。您是说有一个现有的套接字文件要为其创建一个Python套接字对象?如果是这样,socket.fromfd()将复制fd并创建套接字对象。

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

编辑以解决Dani的帖子

我认为您误解了文件描述符的工作原理。操作系统设置了限制。这与FD指向的内容无关,因此mmap在这里不会帮助你(套接字不是在磁盘上也不是btw)。您可能只需要做更好的文件管理 - 完成后关闭文件。

如果您只是真正要求苛刻的要求,您可能需要增加开放FD的限制。这个blog post有一个很好的例子,可以使用resource模块(仅限* NIX)来获取和设置打开文件限制。 getrlimit man page有更多关于其使用的信息。