python pool.map传递多个参数 - generator和set / list

时间:2015-03-20 18:52:49

标签: python python-2.7 multiprocessing python-multiprocessing

我正在阅读大量文件并解析它们,所以我想并行化这个过程。我通过以下方式成功实现了这一目标:

def parse_xml(files):
    for filename in files:
        with open(os.path.expanduser(filename), 'rb') as data_file:
             # parse logic
    return dict # key is each file name

def main():
    numthreads = 16
    numfiles = 24
    pool = multiprocessing.Pool(processes=numthreads)
    rootDir = '~/someLocation/' # directory that has all the files
    paths = [rootDir + f for f in os.listdir(os.path.expanduser(rootDir)) if len(f) > 1]
    try:
        file_list = pool.map(parse_xml, (paths[fname:fname+numfiles] for fname in xrange(0,len(paths), numfiles)))
        process_results(file_list)
        pool.close()
        pool.join()         
    except KeyboardInterrupt:
        pool.terminate() 

一切正常但现在我想在我的parse_xml方法中解析一个用于过滤目的的集合。

阅读pool.map文档后,我意识到它不可能。所以我写了下面的附加包装方法:

def parse_xml_wrapper(multiples):
    return parse_xml(*multiples)

在我的main而不是调用parse_xml我在解析它的设置时调用这个包装器方法:

file_list = pool.map(parse_xml_wrapper(mySet), (paths[fname:fname+numfiles] for fname in xrange(0,len(paths), numfiles)))

我修改了parse_xml方法以接受集合def parse_xml(files, mySet)

TypeError: parse_xml() takes exactly 2 arguments (110277 given)

如何成功解析在Pool

中调用的方法中的另一个参数

0 个答案:

没有答案