0

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


感谢您的回复。

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

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

有什么建议么?

4

2 回答 2

1

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

也许退后一步并在更高的层次上讨论你正在尝试做的事情会有所帮助。

于 2010-05-27T15:45:39.017 回答
0

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

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

编辑以解决 Dani 的帖子

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

如果您只是有非常苛刻的要求,您可能需要增加开放 FD 的限制。这篇resource文有一个使用模块(仅限*NIX)获取和设置打开文件限制的绝佳示例。getrlimit 手册页有更多关于其使用的信息。

于 2010-05-27T15:46:14.197 回答