[英]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.