我想并行化一个文件过滤操作,其中每个过滤器是一个大的正则表达式,因此整个事情需要时间来运行。该文件本身大约100GB。单进程的版本是这样的:python使用多进程来过滤海量文件
def func(line):
# simple function as an example
for i in range(10**7):
pass
return len(line) % 2 == 0
with open('input.txt') as in_sr, open('output.txt', 'w') as out_sr:
for line in input:
if func(line):
out_sr.write(line)
我尝试使用multiprocessing
的imap
但给人ValueError: I/O operation on closed file.
我认为迭代被复制到每一个过程,但不是所有的进程有处理打开。
有没有办法做到这一点使用multiprocessing
,最好是利用池?
如果__name__ =='__main __':'?你必须保持线条的秩序? – eph
@eph是的行必须与输入文件的顺序相同。在我的真实代码中,'with'是函数中的某个地方。 – simonzack
什么是你的文件和正则表达式?在命令行或其他文件处理工具上使用awk会更容易吗? – DainDwarf