2012-11-21 48 views
2

如何将多个参数传递给通过pool.map调用的函数?Python gevent:将多个参数传递给通过pool.map调用的函数

我的代码:

import gevent 
from gevent.pool import Pool 

def process(param1, param2): 
    return "dosomething" 

pool = Pool(10) 
jobs = [('arg1a', 'arg1b'), ('arg2a', 'arg2b')] 

# should pass arguments so that it results in these calls 
# process(param1=arg1a, param2=arg1b) 
# process(param1=arg2a, param2=arg2b) 
results = pool.map(process, jobs) # does not work 
+0

它可以看起来像' pool.map(解包(进程),作业)'。 如果你愿意,你可以投票给'funcy'库添加'unpack'装饰器。 https://github.com/Suor/funcy/pull/62 – ADR

回答

3

看样子gevent.Pool.map方法只允许一个项目,以作为参数传递给你提供的功能进行传递。但是,您可以编写函数很轻松地解开它的参数:

def process(params): 
    param1, param2 = params 
    ... 

或者你也可以处理参数以lambda表达式拆包就在您的来电pool.map

results = pool.map(lambda args: process(*args), jobs) 
相关问题