使用ThreadPoolExecutor的映射传递多个值

时间:2019-07-03 12:42:01

标签: python python-3.x concurrent.futures

我试图找出如何在current.futures库中使用ThreadPoolExecutor.map()。我正在使用Python 3.6。

这是下面显示的代码

import concurrent.futures
def add(x,y):
    return x+y

with concurrent.futures.ThreadPoolExecutor(1) as executor:
    res = executor.map(add, *(1,2)) # Fails 

我的问题是,当我传递参数时,出现以下错误:

builtins.TypeError: zip argument #1 must support iteration

Python文档上的示例仅显示使用一个变量作为输入,但是我想对map函数使用N个变量。我该怎么做?

我真的很想敲这个,如果有人能指出我如何格式化输入参数,我将不胜感激。

我希望能够做这样的事情:

import concurrent.futures
def add(x,y):
    return x+y

numbers = [
(1,2), (2,3), (3,10)
]

with concurrent.futures.ThreadPoolExecutor(1) as executor:
    res = executor.map(add, *numbers) 

请告诉我有关如何格式化参数输入的信息。

2 个答案:

答案 0 :(得分:2)

您可以使用lambda进行以下操作:

import Vue from "vue";
import test1Html from "../Home/test1.cshtml";

document.addEventListener('DOMContentLoaded', function (event) {
    Vue.component('test1',{
        mounted: function () {
            console.log('mounted test1');
        },
        template: test1Html,
        data: function () {
            return {
                message: "try test1 binding",
                list: ['one','two','three','four','five']
            };
        }
    });
});

答案 1 :(得分:1)

您需要创建一个包装函数,该函数接受单个arg(元组),并使用*将其传递给add函数。

注意:您还希望迭代结果以实际访问它们:

import concurrent.futures


def add(x, y):
    return x + y


numbers = [
    (1, 2), (2, 3), (3, 10)
]

res = []
with concurrent.futures.ThreadPoolExecutor(1) as executor:
    for r in executor.map(lambda t: add(*t), numbers):
        res.append(r)

print(res)