首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pool.map: TypeError map()从x到y的位置参数,但是给出了z

pool.map: TypeError map()从x到y的位置参数,但是给出了z
EN

Stack Overflow用户
提问于 2018-12-16 16:23:14
回答 1查看 4.4K关注 0票数 1

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

下面是代码:

代码语言:javascript
复制
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函数,旋转自动机。

错误:

代码语言:javascript
复制
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多处理文档的python中的多处理的基本示例中编写了多处理代码。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-16 18:34:55

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

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

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

代码语言:javascript
复制
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)

Python2.7:如何弥补缺少的pool.starmap?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53804117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档