【问题标题】:Python- about file-handle limits on OSPython-关于操作系统的文件句柄限制
【发布时间】:2010-11-13 17:11:21
【问题描述】:

你好,我用python写了一个程序,当我打开太多临时文件时,我会得到一个异常:打开的文件太多... 然后我发现 Windows 操作系统或 C 运行时有文件句柄限制,所以,我使用 StringIO() 更改我的程序,但仍然不知道 StringIO 是否也受到限制??

【问题讨论】:

    标签: python


    【解决方案1】:

    Python 的 StringIO 不使用 OS 文件句柄,因此不会受到同样的限制。 StringIO 将受到可用虚拟内存的限制,但您可能有大量可用内存。

    通常,操作系统允许单个进程在运行到限制之前打开数千个文件,因此如果您的程序用完文件句柄,您可能会忘记关闭它们。当然,除非您打算打开数千个文件并且真的用完了。

    【讨论】:

    • 哦,谢谢你的幸运星 该程序是多线程的消息服务器,所以一些线程将消息放入队列,其他线程从队列中获取它们。与使用文件句柄一样(如果内存不足,我会先选择文件句柄),但是如果队列上的消息太多,则意味着程序打开的文件句柄太多,然后出现异常。所以,如果那,我认为解决这个问题的唯一方法是使用 StringIO() 而不是文件句柄....希望我的老板愿意为它购买更多内存...:)
    • 文件中有什么?为什么你需要一次打开这么多?为什么不直接关闭文件? “队列”是如何实现的?
    • 字符串在文件中。原因不是我需要打开这么多文件,而是队列问题......前端线程将带有文件句柄的对象放入队列,后端线程从队列中获取这些对象并将临时文件中的字符串写入数据库(之后那,当然关闭临时文件..)。就DB操作而言,前线程比后线程快100倍以上,所以,当程序来高峰时,队列中会堆积很多带有文件句柄的对象,那么程序在运行时必须持有大量的tmpfile ...
    猜你喜欢
    • 2017-07-19
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多