![](/img/trans.png)
[英]How to pass multiple arguments in Multiprocessing executor.map() function
[英]How to use executor.map function in python on keyword arguments
我遇到了一个场景,我需要为 python 中的值列表并行运行函数。 我从concurrent.futures
了解到 executor.map 可以完成这项工作。 我能够使用以下语法executor.map(func,[values])
并行化该函数。
但是现在,我遇到了相同的场景(即函数必须并行运行),但是函数签名与之前和下面给出的不同。
def func(search_id,**kwargs):
# somecode
return list
container = []
with concurrent.futures.ProcessPoolExecutor() as executor:
container.extend(executor.map(func, (searchid,sitesearch=site),[list of sites]))
我不知道如何实现上述目标。 有人可以指导我吗?
如果您有要map
的可迭代sites
,并且您希望将相同的search_term
和pages
参数传递给每个调用。 您可以使用zip
创建一个可迭代对象,它返回 3 个元素的元组,其中第一个是您的站点列表,第二个和第三个是使用itertools.repeat
重复的其他参数
def func(site, search_term, pages):
...
from functools import partial
from itertools import repeat
executor.map(func, zip(sites, repeat(search_term), repeat(pages)))
这是在executor.map
中使用 kwargs 的一种有用方法,只需使用lambda
函数通过**kwargs
表示法传递**kwargs
:
from concurrent.futures import ProcessPoolExecutor
def func(arg1, arg2, ...):
....
items = [
{ 'arg1': 0, 'arg2': 3 },
{ 'arg1': 1, 'arg2': 4 },
{ 'arg1': 2, 'arg2': 5 }
]
with ProcessPoolExecutor() as executor:
result = executor.map(
lambda kwargs: func(**kwargs), items)
我用熊猫DataFrames通过创建项目时,发现这个也很有用to_dict
通过键入items = df.to_dict(orient='records')
或JSON文件加载数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.