python 多线程处理效率?

tuher 2016-01-15 09:13:08
现在工作需要,需要对目录下的xml文件进行处理, 根据指定条件进行合并,因为目录下的文件数量很多(100w),现在考虑用多线程实现,
os.listdir()的结果放入list,然后根据配置的线程数目平分list并发处理 。
线程使用的是:
threads = []
t1 = threading.Thread(target=xxx,args=(xxx,))
threads.append(t1)
t2 = threading.Thread(target=xxx,args=(xxx,))
threads.append(t2)
现在问题是我启动十个线程 和启动一个相比 ,效率并没有多大提升,
每个线程处理平分出来的list中的文件,挨个解析xml文件,符合条件后就对文件进行合并,生成新的xml文件到新目录,备份原文件到备份目录。
因为刚开始使用python多线程, 不是很了解, 不知道为什么效率没有提升?
希望大家可以帮助解答下 ,谢谢~
...全文
201 5 打赏 收藏 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ppchaos 2016-01-20
  • 打赏
  • 举报
回复
You can use process pools in multiprocessing module. def work(foo): foo.do_task() from multiprocessing import Pool pool = Pool() pool.map(work, my_foo_obj_list) pool.close() pool.join()
ppchaos 2016-01-20
  • 打赏
  • 举报
回复
4 down vote You can use process pools in multiprocessing module. def work(foo): foo.do_task() from multiprocessing import Pool pool = Pool() pool.map(work, my_foo_obj_list) pool.close() pool.join()
ppchaos 2016-01-19
  • 打赏
  • 举报
回复
多进程处理,python进程就不会这样了
pcboyxhy 2016-01-17
  • 打赏
  • 举报
回复
如果瓶颈在CPU,python有GIL无法在CPU多核这个维度利用多线程。 如果瓶颈在磁盘,多线程访问同一个磁盘并不会有性能提升。
imagine186 2016-01-16
  • 打赏
  • 举报
回复
python的多线程本来就比较差,相关信息你可以搜索一下GIL python的多线程一般用于IO密集型的程序,而不是CPU密集型的程序

37,737

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧