这个脚本叫做 svnmerge.py我正在尝试调整和优化一下。虽然我是 Python 的新手,所以这并不容易。
目前的问题似乎与脚本中名为RevisionSet
的类有关。本质上,它所做的是创建一个大型哈希表(?),其中包含整数键控 bool 值。在最坏的情况下 - 我们的 SVN 存储库中的每个修订版,现在接近 75,000 个。
之后,它对如此庞大的数组执行集合运算 - 加法、减法、交集等。该实现是最简单的 O(n) 实现,在如此大的集合上自然会变得相当慢。可以优化整个数据结构,因为连续值的跨度很长。例如,从 1 到 74,000 的所有键都可能包含 true
。此外,该脚本是为 Python 2.2 编写的,这是一个相当旧的版本,无论如何我们使用的是 2.6,因此也可能有一些收获。
我可以尝试自己将其拼凑在一起,但这会很困难并且需要花费很多时间 - 更不用说它可能已经在某个地方实现了。虽然我喜欢学习经验,但现在结果更重要。你会建议我做什么?
最佳答案
您可以尝试使用 numpy 而不是普通的 python。我发现它对于此类操作非常很快。
例如:
# Create 1000000 numbers between 0 and 1000, takes 21ms
x = numpy.random.randint(0, 1000, 1000000)
# Get all items that are larger than 500, takes 2.58ms
y = x > 500
# Add 10 to those items, takes 26.1ms
x[y] += 10
因为有更多的行,我认为 75000 也不成问题:)
关于python - 如何优化 Python 中大型(75,000 项) bool 值集的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3967566/