Viv*_*Viv 9 python multithreading threadpool python-multiprocessing
我正在使用 Pool 多线程我的程序,使用 starmap 来传递参数。
我被卡住了,因为我似乎无法找到一种方法来传递 kwargs 以及我在 starmap 函数中传递的zip数组。
pool = Pool(NO_OF_PROCESSES)
branches = pool.starmap(fetch_api, zip(repeat(project_name), api_extensions))
Run Code Online (Sandbox Code Playgroud)
分支请求不完整,因为我仍然无法弄清楚如何传递关键字参数。
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
Run Code Online (Sandbox Code Playgroud)
从分支线调用fetch_api() 时,我想将有效负载作为 {'a':1} 和 key=True 传递。
请指导我的方向或答案。谢谢。使用 Python 3.3+。
isa*_*ndi 10
您可以围绕pool.starmap
它创建一个包装器,该包装器也接受一个超过 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)
Run Code Online (Sandbox Code Playgroud)
然后你可以在你的情况下调用它:
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)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2659 次 |
最近记录: |