gpt4 book ai didi

python线程和性能?

转载 作者:太空狗 更新时间:2023-10-30 00:33:51 26 4
gpt4 key购买 nike

我不得不进行繁重的 I/O 绑定(bind)操作,即解析大文件并将一种格式转换为另一种格式。最初我以前是连续做的,即一个接一个地解析..!性能非常差(过去需要 90 多秒)。所以我决定使用线程来提高性能。我为每个文件创建了一个线程。 (4 个线程)

 for file in file_list:
t=threading.Thread(target = self.convertfile,args = file)
t.start()
ts.append(t)
for t in ts:
t.join()

但令我惊讶的是,没有任何性能改进。现在完成任务也需要大约 90 多秒。由于这是 I/O 绑定(bind)操作,我曾期望提高性能。

最佳答案

在通常的 Python 解释器下,由于 global interpreter lock,线程不会为您的程序分配更多的 CPU 内核。 (又名 GIL)。

multiprocessing模块可以在这里帮助你。 (请注意,它是在 Python 2.6 中引入的,但 Python 2.5 存在向后移植。)

正如 MSalters 所说,如果您的程序受 I/O 限制,那么这是否有用还有待商榷。但这可能值得一试 :)

使用这个模块实现你想要的:

import multiprocessing

MAX_PARALLEL_TASKS = 8 # I have an Intel Core i7 :)

pool = multiprocessing.Pool(MAX_PARALLEL_TASKS)

pool.map_async(convertfile, filelist)

pool.close()
pool.join()

重要!您传递给 map_async 的函数必须是 pickleable 的。一般来说,实例方法是不可腌制的,除非你将它们设计成这样!请注意,上面的 convertfile 是一个函数。

如果您确实需要从 convertfile 获取结果,也有一些方法可以做到。多处理文档页面上的示例应该阐明。

关于python线程和性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3012508/

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