在Python中更改套接字的文件描述符

0 投票
2 回答
2747 浏览
提问于 2025-04-15 23:15

我正在尝试在Python中手动创建一个与套接字相关的文件描述符,然后直接用mmap加载到内存中。把文件放到内存里用mmap很简单,但我找不到把文件和套接字关联起来的方法。


感谢大家的回复。

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

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

有什么建议吗?

2 个回答

0

我可能完全误解了你的问题。你是说你想为一个已经存在的套接字文件创建一个Python的套接字对象吗?如果是这样的话,socket.fromfd()可以复制文件描述符并创建一个套接字对象。

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

编辑以回应Dani的帖子

我觉得你可能误解了文件描述符是怎么工作的。操作系统对它们有一个限制。这和文件描述符指向的内容没有关系,所以使用mmap在这里是没用的(顺便说一下,套接字也不在磁盘上)。你可能只需要更好地管理文件——用完文件后记得关闭它们。

如果你有一些非常苛刻的需求,可能需要增加打开文件描述符的限制。这个博客文章提供了一个很好的例子,说明如何使用resource模块(仅限*NIX系统)来获取和设置打开文件的限制。更多信息可以查看getrlimit手册页

1

你为什么想用mmap把这个加载到内存里呢?如果你在使用类Unix系统,可以创建一个Unix套接字,这是一种文件描述符,可以像其他套接字一样使用。套接字和内存映射文件是两种不同的东西,把它们混在一起可能不是个好主意。

也许我们可以先退一步,讨论一下你想要做的事情,从更高的层面来看会更有帮助。

撰写回答