我正在运行大量关于10-15 mil的数据。在for循环中乘以倍数,我可以从它的for循环中找到缓慢的例如。
当我测试100行,然后是1000行然后每行25.000行时,我解决了这个问题,每次我对行数进行处理时,它需要花费更长的时间才能运行。
我今天正在使用numpy来计算大量的价格和它的工作完美,所以现在我用这么多的数据撞到墙上关闭运行多次重组数据然后我准备将它返回到最后阵列/字典。
当我在for循环中运行for时,它会发出更多的时间,然后花费更多的时间来运行forc我需要运行“for 1 rows * for 2 rows”
我的情况是。
希望你理解我想要的东西,以及为什么这需要花费很多时间,并希望有一个可以帮助我找到更快的方法来计算如此多的数据。
我考虑过多线程选项,但我认为在进入下一个性能设置之前我需要修复主回路问题
我案例的一个非常基本的示例如何在循环地狱中点击此循环
import datetime
start_time = datetime.datetime.now()
product = []
group = []
final_collect = []
for test_product in range(25000):
product.append({'title': test_product})
for (inx, item) in enumerate(product):
group.append({
'product' : item,
'group-data' : []
})
for test_group in range(10):
group[inx]['group-data'].append({'group' : test_group, 'price' : 100.0})
print(inx, test_group)
正如你所看到的那样,当我们说出25.000个产品时,如果我们以1.200.000 mil的速度运行它,那么运行250.000个循环需要大约2-3秒。 * 10分组其每个12.000.000循环,我做它倍增时间,所以它将需要很长时间。但关于这个问题的关闭是否更快?
答案 0 :(得分:1)
run2
与同等run1
(您提供的)相比,可提高30%。输出完全相同。
虽然这可能不是“即插即用”的用例,但它演示了一些可用于提高性能的技巧。
import datetime
def run1(n):
start_time = datetime.datetime.now()
product = []
group = []
final_collect = []
for test_product in range(n):
product.append({'title': test_product})
for (inx, item) in enumerate(product):
group.append({'product': item,
'group-data': []})
for test_group in range(10):
group[inx]['group-data'].append({'group': test_group, 'price': 100.0})
return group
def run2(n):
start_time = datetime.datetime.now()
group = [{'product': {'title': i},
'group-data': [{'group': test_group, 'price': 100.0} for test_group in range(10)]} \
for i in range(n)]
return group
assert run1(10) == run2(10)
%timeit run1(50000) # 1 loop, best of 3: 372 ms per loop
%timeit run2(50000) # 1 loop, best of 3: 260 ms per loop