为了时间测量的目的,我试图在程序中并行化一个函数,但是我得到了一个错误,我不知道如何修复它。
下面是代码:
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 valorRetornorotarDerecha和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多处理文档的python中的多处理的基本示例中编写了多处理代码。
提前谢谢。
发布于 2018-12-16 18:34:55
出现此错误是因为Pool.map()只是希望参数是一个可迭代的参数,但您可以尝试传递更多参数。
签名: 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)https://stackoverflow.com/questions/53804117
复制相似问题