gpt4 book ai didi

python - 为什么多处理性能是看不见的?

转载 作者:太空宇宙 更新时间:2023-11-04 03:34:03 24 4
gpt4 key购买 nike

我看到引用 here ,并尝试将该方法用于我的 for 循环,但它似乎没有按预期工作。

def concatMessage(obj_grab, content):
for logCatcher in obj_grab:
for key in logCatcher.dic_map:
regex = re.compile(key)
for j in range(len(content)):
for m in re.finditer(regex, content[j]):
content[j] += " " + logCatcher.index + " " + logCatcher.dic_map[key]
return content

def transferConcat(args):
return concatMessage(*args)

if __name__ == "__name__":
pool = Pool()
content = pool.map(transferConcat, [(obj_grab, content)])[0]
pool.close()
pool.join()

我想提高 for 循环的性能,因为它需要 22 秒才能运行。

当我直接运行该方法时,它也需要大约 22 秒。

看来增强失败了。

我应该怎么做才能提高 for 循环速度?为什么 pool.map 在我的案例中不起作用?


经nablahero提醒,修改代码如下:

if __name__ == "__main__":
content = input_file(target).split("\n")
content = manager.list(content)
for files in source:
obj_grab.append((LogCatcher(files), content))
pool = Pool()
pool.map(transferConcat, obj_grab)
pool.close()
pool.join()

def concatMessage(LogCatcher, content):
for key in LogCatcher.dic_map:
regex = re.compile(key)
for j in range(len(content)):
for m in re.finditer(regex, content[j]):
content[j] += LogCatcher.index + LogCatcher.dic_map[key]

def transferConcat(args):
return concatMessage(*args)

经过漫长的等待,导致 82 秒完成...

为什么我会遇到这种情况?如何修改我的代码?


obj_grab是一个列表,里面包含了不同文件输入的logCatchercontent是我要拼接的文件,使用Manager()让多进程拼接同一个文件。

最佳答案

obj_grab 和内容中有什么?我猜它只包含一个对象,所以当您启动 Pool 时,您只调用函数 transferConcat 一次,因为您在 obj_grab 和内容中只有一个对象。

如果您使用 map ,请再次查看您的引用资料。 obj_grab 和 content 必须是对象列表才能加快程序速度,因为它会使用不同的 obj_grab 和 content 多次调用该函数。

pool.map 不会加速函数本身 - 函数只是针对不同的数据并行调用多次!

我希望这能澄清一些事情。

关于python - 为什么多处理性能是看不见的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29921279/

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