Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在pool.map()python中删除列表的元素 在这里,我将控制权传递给parserMethod,其中包含一个params inputFile[line:line+chunkSize]元组和一个sharedQueue。_Python_List_Python Multiprocessing - Fatal编程技术网

在pool.map()python中删除列表的元素 在这里,我将控制权传递给parserMethod,其中包含一个params inputFile[line:line+chunkSize]元组和一个sharedQueue。

在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))) 将删除这些项目。然而,您的映射正在逐步遍历整个文件,这让我想知道:您是否试图在解析它们时删除它们?

有谁能告诉我,在inputFile[line:line+chunkSize]传递给parserMethod之后,如何删除它的元素

谢谢

    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)