2017-10-18 110 views
0

我使用multiprocessing.Pool回调组件,像这样:为什么list.extend在这种情况下追加?

def foo(x): 
    err = [] 
    return err 

errors = [] 
res = pool.map_async(foo, mylist, callback=errors.extend) 

print errors 

我也得到:

[[]] 

如果我追加测试误差FOO()内犯错,我得到这个:

[['test']] 

任何想法我在这里失踪?

为什么它不反映此行为:

a = [] 
b = [] 
a.extend(b) 
print a 

结果:

[] 
+0

我无法重现您的结果。当我在顶部运行代码(使用一些样板来使其工作)时,我得到一个空列表作为结果。我在Python 3.6(在更改'print'调用之后)和2.7中都得到了这个。 – Blckknght

回答

0

我不能评论,所以我发帖回答。 pool.map_async将返回一个列表,称之为结果。 您的回调函数适用于此结果。在您的情况下,结果为[[err0],[err1],...],因此error.extend(Result)get [[]]。 试试这个:

def foo(x): 
    err = something 
    return err 

errors = [] 
res = pool.map_async(foo, mylist, callback=errors.extend) 
# or 
# res.wait() 
# print res.get() 
print errors 
相关问题