在pool.map()python中删除列表的元素 在这里,我将控制权传递给parserMethod,其中包含一个params inputFile[line:line+chunkSize]元组和一个sharedQueue。
有谁能告诉我,在inputFile[line:line+chunkSize]传递给parserMethod之后,如何删除它的元素 谢谢在pool.map()python中删除列表的元素 在这里,我将控制权传递给parserMethod,其中包含一个params inputFile[line:line+chunkSize]元组和一个sharedQueue。,python,list,python-multiprocessing,Python,List,Python Multiprocessing,有谁能告诉我,在inputFile[line:line+chunkSize]传递给parserMethod之后,如何删除它的元素 谢谢 processPool.map(parserMethod, ((inputFile[line:line + chunkSize], sharedQueue) for line in xrange(0, lengthOfFile, chunkSize))) 将删除这些项目。然而,您的映射正在逐步遍历整个文件,这让我想知道:您是否试图在解析它们时删除它们?
processPool.map(parserMethod, ((inputFile[line:line + chunkSize], sharedQueue) for line in xrange(0, lengthOfFile, chunkSize)))
将删除这些项目。然而,您的映射正在逐步遍历整个文件,这让我想知道:您是否试图在解析它们时删除它们?这需要映射或解析器更改输入参数,这会带来麻烦
如果您只是想节省内存使用,那就有点晚了:您已经将整个文件保存在InputFile中了。如果您只需要在解析后进行清理,则在解析完成后使用极端形式的delete(一次):
del inputFile[line:line + chunkSize]
如果您想提前减少内存需求,您必须备份一个步骤。与其将整个文件放入列表,不如尝试创建一个漂亮的输入管道。您没有发布此代码的上下文,因此我将使用一个带有几个名称假设的通用案例:
del inputFile[:]
我希望其中至少有一个解决了您潜在的问题。我明白了。我想把内存利用率降到最低。所以第三种解决方案适用于我的问题。但是,我显然不允许在使用.map函数时使用yield,因为它涉及工作进程。它给出了以下错误:cPickle.PicklingError:无法pickle:属性查找内置生成器failedRight。请注意,我的示例代码中没有映射。生成器从内部执行此操作:在每个生成的块上依次调用parserMethod。
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)