我想对数千个文件同时进行一些处理。抓取所有文件的第一个字节并执行操作,转到下一个字节等。文件可以是任何大小,因此将它们全部加载到内存中可能会让人望而却步。
我担心由于操作系统文件描述符的限制,只是天真地打开数千个文件并阅读它们似乎可能会遇到问题。
但是我想,循环和打开/关闭文件效率会相当低。
是否有一些有效的机制来处理我正在尝试做的事情?
注意:此功能可能会被分发以使用我无法控制的机器,因此我不能只更改操作系统上的设置。
答案 0 :(得分:0)
我想同时处理数千个文件。抓取所有文件的第一个字节并执行某些操作,转到下一个字节等。
这些文件是否足够小,您可以立即将它们全部读入内存。如果是这样,那么一次读取一个文件,然后一次一个字节处理所有文件。
我担心由于操作系统文件描述符的限制,只是天真地打开数千个文件并阅读它们似乎我可能会遇到问题。
你可能。找出答案的唯一方法是尝试。
但是我想,循环和打开/关闭文件效率会相当低。
是的。但是,如果您无法将所有文件读入内存,并且您的操作系统一次无法打开数千个文件,那么这是您的最后手段。
您可以做的是找出系统可以处理的同时打开文件的限制。我们只是为了讨论而说,您的系统一次可以打开100个文件,并且有2,500个文件需要处理。
然后你的过程看起来像这样。
现在,在通过所有文件运行此过程后,您将拥有25个中间文件。
然后你的第二个过程看起来像这样。
您可以通过对操作系统的实验或研究来确定实际数字(同时打开的文件,中间文件的数量)。