试图用enumerate理解ThreadPool.map

时间:2017-08-27 18:50:06

标签: python multithreading

我不明白这段代码中(* p)的目的。

有人可以帮忙吗? 我是新来的。

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))

2 个答案:

答案 0 :(得分:0)

从第一个lambda开始,它返回一个包含两个值的元组。因此,在第二个lambda中,{ "_index": "movies", "_type": "movie", "_id": "AV4jhLAYQqa7xxY9fFkM", "_score": 1, "_source":{"movieName":"The War"} }, { "_index": "movies", "_type": "movie", "_id": "AV4jjQPbfc86ZOjMT9mQ", "_score": 1, "_source":{"movieName":"The War"} }, 包含返回的元组。

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

这样做:

p

这是必需的,因为i, prediction = p 只为函数调用接受一个参数。

答案 1 :(得分:0)

如果重写为单线程应用程序,你会得到类似这样的东西

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

map()函数将在集合上应用函数p。 “splat运算符”正在解压缩每个线程的枚举

我认为可以编写内部lambda,例如

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

foo(enumerate(out))