删除pool.map()python中列表的元素

时间:2015-11-06 17:56:01

标签: python list python-multiprocessing

    processPool.map(parserMethod, ((inputFile[line:line + chunkSize], sharedQueue) for line in xrange(0, lengthOfFile, chunkSize)))
  1. 在这里,我将控制权传递给parserMethod,并带有一个params inputFile [line:line + chunkSize]和一个sharedQueue元组。
  2. 有人能告诉我如何在传递给parserMethod之后删除inputFile [line:line + chunkSize]的元素吗?

    谢谢!

1 个答案:

答案 0 :(得分:0)

del inputFile[line:line + chunkSize]

将删除这些项目。但是,你的地图正在逐步浏览整个文件,这让我想知道:你是否试图在解析时删除它们?这需要地图或解析器来改变输入参数,这会引起麻烦。

如果您只是想节省内存使用量,那就有点晚了:您已经将整个文件保存在InputFile中。如果您只需要在解析后进行清理,那么在解析完成后,请使用极端形式的 del ete:

del inputFile[:]

如果您想预先减少内存需求,则必须备份一个步骤。不要将整个文件放入列表,而是尝试制作一个不错的输入管道。您没有发布此代码的上下文,因此我将使用具有几个名称假设的通用案例:

def line_chunk_stream(input_stream, chunk_size):
    # Generator to return a stream of paring units,
    #   <chunk_size> lines each.
    # To make sure you could check the logic here,
    #   I avoided several Pythonic short-cuts.
    line_count = 0
    parse_chunk = []
    for line in input_stream:
        line_count += 1
        parse_chunk.append(line)
        if line_count % chunk_size == 0:
            yield parse_chunk
            del parse_chunk[:]

input_stream = open("source_file", 'r')
parse_stream = line_chunk_stream(input_stream, chunk_size)
parserMethod(parse_stream)

我希望其中至少有一个能解决您的根本问题。