我有一个包含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)