使用地图、池和管理器



我有一个包含tuples作为元素的list。 该列表如下所示: elements = [('a', 'b'), ('c', 'd'), ...]

我想在此列表中执行一些操作。但是这个列表中的元素数量是巨大的。因此,我想进行多处理。此外,最终结果应存储在另一个列表中。但是我无法弄清楚如何传递论点。这是我的示例代码:

class DoSomething:
    def __init__(self):
        pass
    def __call__(self, pair, final_list):
        y = " ".join(pair)
        if y in ["a b c", " b c", "a c"]:
            final_list+=y
pairs = [('a', 'b'), ('a', 'c'), ('b', 'c'), ('b', 'd')]
ds = DoSomething()
p =  Pool()
with Manager() as manager:
    final_list = manager.list()
    p.map(ds(..)) # I don't know how to call this now

现在如何将final_list传递给ds

我认为您不需要将final_list传递给可调用对象,只需在类中声明final_list,甚至在__init__中声明更好。

from multiprocessing import Pool, Manager

class DoSomething:
    m = Manager()
    final_list = m.list()
    def __init__(self):
    # m = Manager()
    # self.final_list = m.list()
        pass
    def __call__(self, pair):
        y = " ".join(pair)
        if y not in ["a b c", " b c", "a c"]:
            self.final_list.append(y)
pairs = [('a', 'b'), ('a', 'c'), ('b', 'c'), ('b', 'd')]
ds = DoSomething()
p =  Pool()
p.map(ds, pairs)
print(ds.final_list)

或者您也可以使用 starmap 来传递多个参数,如下所示

l = list(zip_longest(l, pairs))
p.starmap(ds, l)

相关内容

  • 没有找到相关文章

最新更新