在 Python 中使用 Pool 时将 kwargs 传递给 starmap
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)
我正在使用 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)