我有一个非常大的列表,我必须运行这个列表的很多查找。 更具体地说,我在一个大型(> 11GB)文本文件上进行处理,但有一些项目出现了多次,而且我只在它们出现时才处理它们。 如果模式显示出来,我将它处理并放到列表中。如果该项目再次出现,我检查它在列表中,如果是的话,我只是通过处理,像这样:加快列表中的查找项目(通过Python)
[...]
if boundary.match(line):
if closedreg.match(logentry):
closedthreads.append(threadid)
elif threadid in closedthreads:
pass
else:
[...]
代码本身是远远没有达到最佳。我的主要问题是'closedthreads'列表包含几百万项,整个操作开始变得越来越慢。 我认为它可以帮助排序列表(或使用'排序列表'对象)每个append()后,但我不知道这一点。 什么是最优雅的溶剂?
到目前为止的答案表明,了解更多关于'threadid'的信息会有所帮助:它是哪种类型,如果值受到某种限制...最后,您需要一些快速查找,因此哈希,以及在某些情况下,制作你自己的散列函数可能是一条可行的路线;领域知识帮助那里。 – mknecht
threadid是一个简单的整数。 (我正在处理大量的mysql_slow.log文件,以便在具有percona-playback的服务器上重新运行它们。为了加速重播过程,我必须关闭最后出现在日志中的线程 – banyek
然后接受的答案很可能是如果你仍然有速度问题,那么应该仔细看看这些数字,或者更确切地说,用一些不同的方式来解决实际问题:) – mknecht