首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用map进行多处理

使用map进行多处理
EN

Stack Overflow用户
提问于 2016-08-01 08:22:35
回答 1查看 220关注 0票数 0

我有一个字符串列表,在每个字符串上我做了一些更改,您可以在wordify()中看到这些更改。现在,为了加快速度,我使用chunked()将列表拆分成子列表(子列表的数量是CPU核心的数量- 1)。这样我就可以得到看起来像[[,,],[,,],[,,],[,,]]的列表。

我试图实现的目标是:

我想同时对每个子列表执行wordify(),将子列表作为单独的列表返回。我想等到所有进程完成,然后将这些子列表连接到一个列表中。下面的方法不起作用。

代码语言:javascript
复制
import multiprocessing
from multiprocessing import Pool
from contextlib import closing

def readFiles():
    words = []
    with open("somefile.txt") as f:
        w = f.readlines()
    words = words + w 
    return words


def chunked(words, num_cpu):
    avg = len(words) / float(num_cpu)
    out = []
    last = 0.0    
    while last < len(words):
        out.append(words[int(last):int(last + avg)])
        last += avg    
    return out    


def wordify(chunk,wl):
    wl.append([chunk[word].split(",", 1)[0] for word in range(len(chunk))]) 
    return wl


if __name__ == '__main__':
    num_cpu = multiprocessing.cpu_count() - 1
    words = readFiles()
    chunked = chunked(words, num_cpu)
    wordlist = []
    wordify(words, wordlist) # works
    with closing(Pool(processes = num_cpu)) as p:
        p.map(wordify, chunked, wordlist) # fails
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-01 08:29:40

您已经编写了代码,以便只将一个函数传递给map;知道您希望它将wordlist传递给函数的第二个参数是不够智能的。

TBH部分函数应用程序在Python语言中有点笨拙,但您可以使用functools.partial

代码语言:javascript
复制
from functools import partial
p.map(partial(wordify, wordlist), chunked)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38689526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档