繁体   English   中英

在Python中使用Pool时,将kwargs传递给星图

[英]Pass kwargs to starmap while using Pool in Python

我正在使用Pool来使用starmap多线程化我的程序来传递参数。

我被困了,因为我似乎无法找到一种方法来传递kwargs以及我在starmap函数中传递的zip数组。

pool = Pool(NO_OF_PROCESSES)
branches = pool.starmap(fetch_api, zip(repeat(project_name), api_extensions))

分支请求是不完整的,因为我仍然无法弄清楚如何传递关键字参数。

def fetch_api(project_name, api_extension, payload={}, headers={}, API_LINK=API_LINK, key=False):
    headers[AUTH_STRING] = 'Gogo'
    call_api = API_LINK + project_name + api_extension
    response_api = requests.get(call_api, headers=headers, params=payload)

    if key: return project_name + ':' + response_api
    else: return response_api

从分支行调用fetch_api()时 ,我希望将有效负载作为{'a':1}和key = True传递。

请指导我指导或回答。 谢谢。 使用Python 3.3+。

您可以在pool.starmap周围创建一个包装器,它也接受over kwargs词典的迭代器。

from itertools import repeat

def starmap_with_kwargs(pool, fn, args_iter, kwargs_iter):
    args_for_starmap = zip(repeat(fn), args_iter, kwargs_iter)
    return pool.starmap(apply_args_and_kwargs, args_for_starmap)

def apply_args_and_kwargs(fn, args, kwargs):
    return fn(*args, **kwargs)

然后你可以在你的情况下调用它:

args_iter = zip(repeat(project_name), api_extensions)
kwargs_iter = repeat(dict(payload={'a': 1}, key=True))
branches = starmap_with_kwargs(pool, fetch_api, args_iter, kwargs_iter)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM