我有一个list
,其中包含tuples
作为元素。列表如下所示:
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
?
答案 0 :(得分:0)
我认为您不需要将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)