gpt4 book ai didi

Python - 关于运行时间和内存使用的可扩展性很重要

转载 作者:太空宇宙 更新时间:2023-11-04 02:05:05 26 4
gpt4 key购买 nike

我有 python 脚本来过滤 csv 文件中的大量数据。该要求要求考虑运行时间和内存使用方面的可伸缩性。

我写了 2 个脚本,它们都可以很好地过滤数据。关于可伸缩性,我决定使用 python 生成器,因为它使用迭代器并且不会在内存中保存太多数据。

当我比较2个脚本的运行时间时,我发现如下:

脚本 1 - 使用生成器 - 需要更多时间 - 0.0155925750732s

def each_sentence(text):
match = re.match(r'[0-9]+', text)
num = int(text[match.start():match.end()])
if sympy.isprime(num) == False:
yield text.strip()

with open("./file_testing.csv") as csvfile:
for line in csvfile:
for text in each_sentence(line):
print(text)

脚本 2 - 使用拆分且不使用生成器 - 花费更少的时间 - 0.00619888305664

with open("./file_testing.csv") as csvfile:
for line in csvfile:
array = line.split(',')
num = int(array[0])
if sympy.isprime(num) == False:
print line.strip()

为了满足要求,我需要使用python生成器吗?或任何建议或建议?

最佳答案

To meet the requirement, do I need to use python generator?

不,你不知道。脚本 1 没有意义。生成器总是执行一次并在第一次迭代中返回一个结果。

Any suggestions or recommendations?

您需要了解三件事:复杂性、并行化和缓存。

  • 复杂性基本上意味着“如果我将输入数据(csv 文件)的大小加倍,我需要两倍的时间吗?还是四倍?还是什么”?

  • 并行化意味着以一种易于添加更多资源来解决问题的方式来解决问题。

  • 缓存很重要。如果您不必一直重新创建所有内容,事情就会变得更快,但您可以重复使用已经生成的内容。

主循环 for line in csvfile: 已经很好地扩展了,除非 csv 文件包含极长的行。

脚本 2 包含一个错误:如果一行中的第一个单元格不是整数,则 int(array[0]) 将引发值错误。

isprime 函数可能是您代码中的“热点”,因此您可以尝试将其与多个线程或子进程并行化。

关于Python - 关于运行时间和内存使用的可扩展性很重要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54898018/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com