pool.map:TypeError map()从x到y接受位置参数,但给定z [英] pool.map: TypeError map() takes from x to y positional arguments but z were given
问题描述
出于时间测量的目的,我正在尝试在程序中并行化一个函数,但是出现错误,并且我不知道如何解决该问题.
I'm trying to parallelize a function in my program for time measurement purposes, but I get an error and I don't know how to fix it.
代码如下:
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函数旋转自动机.
rotarDerecha and rotarIzquierda functions, rotates the automaton.
错误:
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
我从谢谢.
推荐答案
出现错误是因为Pool.map()
只是期望一个自变量可迭代的参数,但是您尝试传递更多. /p>
The error comes because Pool.map()
is just expecting one argument for the argument-iterable, but you try to pass more.
签名:Pool.map(func,可迭代,chunksize = None)
Signature: Pool.map(func, iterable, chunksize=None)
您需要将参数组合(压缩)为一个可迭代的.此任务可迭代项的每个项目都应包含一个函数调用的参数.然后,您可以使用.starmap()
而不是.map()
来解压缩并将参数元组映射到目标函数参数.
You need to combine (zip) your arguments into one iterable. Every item of this task-iterable should contain the arguments for one function call. Then you use .starmap()
instead of .map()
to let it unpack and map the argument-tuples to the target-function parameters.
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:如何补偿丢失的pool.starmap?
这篇关于pool.map:TypeError map()从x到y接受位置参数,但给定z的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!