我有一个python脚本正在运行,它在多个线程中启动相同的函数。这些函数创建并处理2个计数器(c1和c2)。来自分叉进程的所有c1计数器的结果应该合并在一起。与所有c2计数器的结果相同,由不同的叉子返回。在多处理/映射函数中返回计数器对象
我的(伪)码的样子说:
def countIt(cfg)
c1 = Counter
c2 = Counter
#do some things and fill the counters by counting words in an text, like
#c1= Counter({'apple': 3, 'banana': 0})
#c2= Counter({'blue': 3, 'green': 0})
return c1, c2
if __name__ == '__main__':
cP1 = Counter()
cP2 = Counter()
cfg = "myConfig"
p = multiprocessing.Pool(4) #creating 4 forks
c1, c2 = p.map(countIt,cfg)[:2]
# 1.) This will only work with [:2] which seams to be no good idea
# 2.) at this point c1 and c2 are lists, not a counter anymore,
# so the following will not work:
cP1 + c1
cP2 + c2
按照上面的例子中,我需要一个像结果: CP1 =计数器({ '苹果':25, '香蕉':247, 'orange':24}) cP2 = Counter({'red':11,'blue':56,'green':3})
所以我的问题:我该如何计算事物洞察分叉过程为了汇总父进程中的每个计数器(全部是c1和全部c2)?
@mattm这是行不通的,因为'总和()'不会返回柜台?以下错误发生:'TypeError:不支持的操作数类型为+:'int'和'Counter'' –
至少这行肯定是一个错误:'c1,c2 = p.map(countIt,cfg)[ :2]'。你可以看到如何处理swenzel的答案的结果。 – KobeJohn