Python,并行处理大型文本文件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python,并行处理大型文本文件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2247字,纯文字阅读大概需要4分钟。
内容图文
![Python,并行处理大型文本文件](/upload/InfoBanner/zyjiaocheng/795/98b34fc4cbfe4b0f93f821e5bc8d41e9.jpg)
样本记录在数据文件(SAM文件)中:
M01383 0 chr4 66439384 255 31M * 0 0 AAGAGGA GFAFHGD MD:Z:31 NM:i:0
M01382 0 chr1 241995435 255 31M * 0 0 ATCCAAG AFHTTAG MD:Z:31 NM:i:0
......
>数据文件是逐行的
>数据文件的大小从1G??到5G不等.
我需要逐行查看数据文件中的记录,从每一行获取一个特定值(例如第4个值,66439384),并将此值传递给另一个函数进行处理.然后一些结果计数器将被更新.
基本工作流程是这样的:
# global variable, counters will be updated in search function according to the value passed.
counter_a = 0
counter_b = 0
counter_c = 0
open textfile:
for line in textfile:
value = line.split()[3]
search_function(value) # this function takes abit long time to process
def search_function (value):
some conditions checking:
update the counter_a or counter_b or counter_c
使用单个进程代码和大约1.5G数据文件,在一个数据文件中运行所有记录大约需要20个小时.我需要更快的代码,因为有超过30种这种数据文件.
我正在考虑并行处理N个块中的数据文件,并且每个块将执行上述工作流并同时更新全局变量(counter_a,counter_b,counter_c).但我不知道如何在代码中实现这一点,或者这将是有效的.
我可以访问一台服务器机器:24个处理器和大约40G RAM.
有人可以帮忙吗?非常感谢.
解决方法:
最简单的方法可能是使用现有代码一次完成所有30个文件 – 仍然需要一整天,但您可以一次完成所有文件. (即“9个月内9个婴儿”很容易,“1个月内1个婴儿”很难)
如果你真的想要更快地完成一个文件,那将取决于你的计数器实际更新的方式.如果几乎所有工作都只是在分析值,您可以使用多处理模块卸载它:
import time
import multiprocessing
def slowfunc(value):
time.sleep(0.01)
return value**2 + 0.3*value + 1
counter_a = counter_b = counter_c = 0
def add_to_counter(res):
global counter_a, counter_b, counter_c
counter_a += res
counter_b -= (res - 10)**2
counter_c += (int(res) % 2)
pool = multiprocessing.Pool(50)
results = []
for value in range(100000):
r = pool.apply_async(slowfunc, [value])
results.append(r)
# don't let the queue grow too long
if len(results) == 1000:
results[0].wait()
while results and results[0].ready():
r = results.pop(0)
add_to_counter(r.get())
for r in results:
r.wait()
add_to_counter(r.get())
print counter_a, counter_b, counter_c
这将允许50个slowfuncs并行运行,因此不需要花费1000s(= 100k * 0.01s),完成需要20s(100k / 50)* 0.01s.如果你可以像上面那样将你的函数重构为“slowfunc”和“add_to_counter”,那么你应该可以获得24倍的加速.
内容总结
以上是互联网集市为您收集整理的Python,并行处理大型文本文件全部内容,希望文章能够帮你解决Python,并行处理大型文本文件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。