kum*_*mar 5 python performance multithreading
我不得不做大量的I/O绑定操作,即解析大文件并从一种格式转换为其他格式.最初我曾经连续做过,即一个接一个地解析..!性能非常差(使用时间超过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()
Run Code Online (Sandbox Code Playgroud)
但令我惊讶的是,没有任何性能提升.现在还需要大约90秒以上才能完成任务.由于这是I/O绑定操作,我原本期望提高性能.
det*_*tly 10
在通常的Python解释器下,由于全局解释器锁(又称GIL),线程不会为程序分配更多的CPU核心.
在多处理模块,可以帮助你在这里.(请注意,它是在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()
Run Code Online (Sandbox Code Playgroud)
重要!传递给的函数map_async必须是pickleable.通常,实例方法不是pickleable,除非你设计它们!请注意,convertfile上面是一个功能.
如果您确实需要从中获取结果convertfile,那么也有办法实现.多处理文档页面上的示例应该澄清.
| 归档时间: |
|
| 查看次数: |
2654 次 |
| 最近记录: |