2017-08-27 80 views
-2

我不明白此代码中(* p)的用途。试图通过枚举了解ThreadPool.map

任何人都可以请帮忙吗?
我对此很陌生。

from multiprocessing.pool import ThreadPool 

pool=ThreadPool() 
def mul(x,y): 
    print x*y 

out=[4,5,6] 
pool.map(lambda p: (lambda i, prediction: 
      mul(prediction, i))(*p), 
      enumerate(out)) 
+0

我还可以前往了对文档的ThreadPool.map –

+0

没有什么我不理解是这个代码的流程 –

+0

拉姆达内部labmda是如何工作的 –

回答

0

从第一个lambda开始,它返回一个包含两个值的元组。因此在第二个lambda中,p包含返回的元组。

要从这两个变量中得到每一个,你必须解开它们,这正是星号所做的。

它这样做是:

i, prediction = p 

这这里需要为multiprocessing.pool.map只需要在函数调用的一个参数。

+0

@Omerjaved很高兴它有帮助。考虑接受答案关闭主题:)再次欢迎并考虑阅读所有资源:[旅游],[问] – Y0da

0

如果改写为单线程应用程序,你会得到这样的事情

for i, prediction in enumerate(out): 
    mul(prediction, i) 

map()功能将应用功能,p一个集合。在“图示符”是拆包枚举在每个线程

我认为,内部拉姆达可以写,例如

def foo(*args): 
    mul(args(0), args(1)) 

foo(enumerate(out)) 
+0

谢谢Cricket007现在我明白了,想要upvote,但不能 –