executor.map 和命名参数传递

问题描述 投票:0回答:1

我有一个函数必须使用大量参数类型运行的情况

# generic function with named parameters
def genericFn(X, y, a_fn ='t', o_fn ='a', l_fn='b', dim=2):
   ...
  return accuracy

我有一个参数类型列表

a_fns = ['t', 's', 'r', 'l']
o_fns = ['s', 'a']
l_fns = ['m', 'h', 'l', 'b', 'k', 'p']

如何将函数的所有可能组合传递到池中

with concurrent.futures.ProcessPoolExecutor() as executor:
  results_list = executor.map(genericFn, (combinations of named parameters))
python concurrency iterator future map-function
1个回答
0
投票

请记住,您需要根据您的需要调整示例。 你可以使用这样的东西:

from functools import partial

class dict_to_kwargs:
    def __init__(self, func):
        self.func = func

    def __call__(self, arg, **kwargs):
        return self.func(**kwargs, **arg)

class your_class:
    def your_method(self):
        result_executor = executor.map(
                    dict_to_kwargs(
                        partial(
                            method_name_to_map,
                            named_param_1=named_unvariable_param_1_value,
                            named_param_2=named_unvariable_param_2_value,
                            named_param_3=named_unvariable_param_3_value,
                            named_param_4=named_unvariable_param_4_value,
                            named_param_5=named_unvariable_param_5_value,
                        )
                    ),
                    [{"named_param_6": x} for x in named_variable_param_6_values],
                )
        return list(result_executor) # to return it like a list
  • 'method_name_to_map' 是您想要发送参数并进行迭代的方法。
  • 'named_unvariable_param' 用于每次迭代时应相同的值。
  • 'named_variable_param' 如果您要传递可变且应该迭代的参数。
  • 'dict_to_kwargs class'是这里的技巧之一。它用于将您传递的内容转换为 kwargs。
  • 每个文档中的
  • 部分方法”:

“返回一个新的部分对象,调用时其行为类似于 func 使用位置参数 args 和关键字参数调用 关键词。如果向调用提供更多参数,则它们是 附加到args。如果提供了额外的关键字参数,它们 扩展和覆盖关键字。”

希望有帮助😊

© www.soinside.com 2019 - 2024. All rights reserved.