概述
当fileobj很大时,list(file_obj)可能需要大量内存。我们可以通过使用itertools在需要时提取行块来减少内存需求。
特别是,我们可以使用reader = csv.reader(f)
chunks = itertools.groupby(reader, keyfunc)
将文件分割成可处理的块,以及groups = [list(chunk) for key, chunk in itertools.islice(chunks, num_chunks)]
result = pool.map(worker, groups)
使多处理池一次处理num_chunks块。
通过这样做,我们只需要足够的内存来保存一些(num_chunks)块,而不是整个文件。import multiprocessing as mp
import itertools
import time
import csv
def worker(chunk):
# `chunk` will be a list of CSV rows all with the same name column
# replace this with your real computation
# print(chunk)
return len(chunk)
def keyfunc(row):
# `row` is one row of the CSV file.
# replace this with the name column.
return row[0]
def main():
pool = mp.Pool()
largefile = 'test.dat'
num_chunks = 10
results = []
with open(largefile) as f:
reader = csv.reader(f)
chunks = itertools.groupby(reader, keyfunc)
while True:
# make a list of num_chunks chunks
groups = [list(chunk) for key, chunk in
itertools.islice(chunks, num_chunks)]
if groups:
result = pool.map(worker, groups)
results.extend(result)
else:
break
pool.close()
pool.join()
print(results)
if __name__ == '__main__':
main()
最后
以上就是魁梧金鱼为你收集整理的python可以处理特别大的数据文件吗_将大文件中的数据分块以进行多处理?的全部内容,希望文章能够帮你解决python可以处理特别大的数据文件吗_将大文件中的数据分块以进行多处理?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复