池.map:TypeError map()接受从x到y的位置参数,但给出了z

2024-09-29 01:36:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在我的程序中并行化一个函数来测量时间,但是我遇到了一个错误,我不知道如何修复它。在

代码如下:

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函数,旋转自动机。在

错误:

^{pr2}$

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

提前谢谢。在


Tags: inifreplaceautomatanumeroreglacasillaevoluciones
1条回答
网友
1楼 · 发布于 2024-09-29 01:36:12

出现错误是因为Pool.map()只需要一个参数iterable的一个参数,但您尝试传递更多参数。在

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

你需要把你的论点合并成一个可编辑的。此任务iterable的每个项都应包含一个函数调用的参数。然后使用.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?

相关问题 更多 >