我正在尝试手动创建与python中的套接字关联的文件描述符,然后使用mmap直接加载到内存中。使用mmap在内存中创建文件很简单,但我找不到将文件与套接字关联的方法。
感谢您的回复。
我遇到的问题是我无法为python(或操作系统)创建更多的套接字我收到错误:“[errno 24]打开的文件过多。”
我认为错误是因为我无法在磁盘上创建更多文件描述符,所以我想在内存中创建它们。为了避免这种限制。
有什么建议吗?
答案 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有更多关于其使用的信息。