【发布时间】:2018-06-17 13:06:50
【问题描述】:
在处理大量数据时,尽量减少数据库请求的数量并执行批量操作反而对性能有很大帮助。
问题:是否可以在 Linux 上一次/批量检索 10,000 个文件的 mtimes?
我希望尽量减少系统调用。
在这里找不到东西:http://www.gnu.org/software/libc/manual/html_node/index.html
PS:目前,我使用 python:os.walk 检索这些文件名。
【问题讨论】:
-
我认为批量 mtime 请求是不可能的,但是检索 10,000 个文件的 mtime 并不是最慢的操作。您是否尝试过分析您的代码并找到其他慢速部分?也许值得优化那些......
-
如果那不是,并且您有一些来源/参考资料,您可以将其作为答案,我会接受。猜猜为什么提到数据库查询? ;-) 已经优化。我还发现系统调用比函数调用慢 20-100 倍:softwareengineering.stackexchange.com/questions/311165/…
-
其他缓慢的部分指的是其他任何东西,数据库和系统调用并不是唯一可以使程序变慢的东西。如果您对数据执行一些 O(n^2) 操作,那么无论数据库和系统调用优化如何,您的程序都会很慢。我有点过度优化的感觉:如果您使用与 python 一样高级的语言编写,那么纳秒长调用的 100 倍优化将不会对执行速度产生任何明显的整体改进。如果您需要将代码优化到函数调用 - 放弃 python 并用 C 编写,您将获得更大的加速。
-
不,您仍然需要每个文件的 dirwalk +one stat() 系统调用。要对您的程序进行基准测试,请将其与
find . -ls >/dev/null进行比较,就系统调用而言,它本质上是相同的。我预计 Python 开销不会超过 ~10%。 -
只有 STATX_MTIME 标志(没有其他标志)的statx 可能会比
stat更有效,但它需要进行基准测试。
标签: python linux performance system-calls stat