【发布时间】:2018-12-16 16:23:14
【问题描述】:
我正试图在我的程序中并行化一个函数以用于时间测量,但我得到一个错误,我不知道如何修复它。
代码如下:
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中多处理的基本示例中编写了多处理代码。
提前致谢。
【问题讨论】:
-
我很确定 map 只接受获得一个参数的函数。尝试使用星图。
-
.. 要么将您的参数作为元组列表传递。
p.map(func, [(1,2), (3,4)]) -
当我不使用多处理中的进程时,该函数工作得很好,由于我使用 Pool 时给出的错误,这让我感到困惑。
标签: python python-3.x parallel-processing multiprocessing python-multiprocessing