python - 池.map : TypeError map() takes from x to y positional arguments but z were given

标签 python python-3.x parallel-processing multiprocessing python-multiprocessing

我正在尝试并行化程序中的函数以进行时间测量,但出现错误,而且我不知道如何修复它。

代码如下:

def evolucionAutomata(automata, regla, numero_evoluciones):
    if(numero_evoluciones == 0):
        return 0
    with Pool(4) as p:
        automataEvolucionado = list(p.map(obtenerVecindario, automata, rotarDerecha(automata, 1), rotarIzquierda(automata, 1), lista_regla))**
    print(automataEvolucionado)
    evolucionAutomata(automataEvolucionado, regla, numero_evoluciones - 1)

def obtenerVecindario(casilla, casillaDerecha, casillaIzquierda, regla):
    if( "X" in casilla ):
        casillaBinaria = casilla.replace("X", "1")
    if( "O" in casilla):
        casillaBinaria = casilla.replace("O", "0")
    if ("X" in casillaDerecha):
        casillaBinariaDerecha = casillaDerecha.replace("X", "1")
    if ("O" in casillaDerecha):
        casillaBinariaDerecha = casillaDerecha.replace("O", "0")
    if ("X" in casillaIzquierda):
        casillaBinariaIzquierda = casillaIzquierda.replace("X", "1")
    if ("O" in casillaIzquierda):
        casillaBinariaIzquierda = casillaIzquierda.replace("O", "0")
    vecindario = []
    vecindario.append(casillaBinariaDerecha)
    vecindario.append(casillaBinaria)
    vecindario.append(casillaBinariaIzquierda)
    vecindario = list(map(int, vecindario))
    valorRetorno = evaluarVecindario(vecindario, regla)
    return valorRetorno

rotarDerecha 和 rotarIzquierda 函数,旋转自动机。

错误:

automataEvolucionado = list(p.map(obtenerVecindario, automata, rotarDerecha(automata, 1), rotarIzquierda(automata, 1), lista_regla))
TypeError: map() takes from 3 to 4 positional arguments but 6 were given

我已经从 python multiprocessing documentation 中的 python 多处理基本示例中编写了多处理代码。 .

提前致谢。

最佳答案

出现错误是因为 Pool.map() 只是期望参数可迭代的一个参数,但您尝试传递更多参数。

Signature: Pool.map(func, iterable, chunksize=None)

您需要将您的参数合并(zip)到一个可迭代中。此任务可迭代的每一项都应包含一个函数调用的参数。然后,您使用 .starmap() 而不是 .map() 来让它解包并将参数元组映射到目标函数参数。

from multiprocessing import Pool


def f(arg1, arg2):
    print(arg1, arg2)


if __name__ == '__main__':

    N = 10

    args1 = [*range(N)]
    args2 = [100] * N  # make argument iterables same length

    # create list of argument tuples for individual function calls
    tasks = [*zip(args1, args2)]
    # [(0, 100), (1, 100), (2, 100), ..., (9, 100)]

    with Pool(4) as pool:
        pool.starmap(f, iterable=tasks)
<小时/>

Python 2.7: How to compensate for missing pool.starmap?

关于python - 池.map : TypeError map() takes from x to y positional arguments but z were given,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53804117/

相关文章:

python OrderedDict 获取关键索引的

python - 有没有办法在 Python (3) for 循环中做条件语句?

python - 从单个脚本运行多个 python 脚本,并在它们之间来回通信?

python - 是否可以使用 pexpect 生成将显示在 bash 历史记录中的 bash shell 命令?

python - 如何使用GAE在网站上显示youtube视频

python - Scikit Learn RandomForest 内存错误

python - "unit tests have failed"for beautifulsoup

macos - python3.6 ffmpeg调用MacOSX(关闭)

c - 为什么我的计算机在使用并行代码时没有显示加速?

java - 线程的意外行为