Tengo una función que simula un sistema estocástico de reacciones químicas. Ahora quiero usar la clase Process de la biblioteca Pythons Multiprocessing para ejecutar la función de simulación estocástica varias veces.

Intenté lo siguiente:

v = range(1, 51)
def parallelfunc(v):     
    gillespie_tau_leaping(start_state, LHS, stoch_rate, state_change_array)


if __name__ == '__main__':
    start = datetime.utcnow()
    p = Process(target=parallelfunc, args=(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50))
    p.start()    
    p.join()
    end = datetime.utcnow()
    sim_time = end - start
    print(f"Simualtion utc time:\n{sim_time}")

Pero esto da como resultado el error TypeError: parallelfunc() takes 1 positional argument but 50 were given

Luego intenté simplemente pasar range(1, 51) a ambos parallelfunc y al parámetro args del proceso, pero luego obtuve SyntaxError: invalid syntax en la desaceleración de parallelfunc

El método de usar una función como parallelfunc de esta manera funciona cuando uso pool.map allí solo paso parallelfunc seguido de una lista del 1 al 50.

Pero no puedo entender qué está pasando mal aquí.

Cualquier sugerencia Saludos.

0
Mike5298 22 jul. 2020 a las 13:16

2 respuestas

La mejor respuesta

Eso es porque has dado demasiados argumentos. tratar

def parallelfunc(*v):     
     gillespie_tau_leaping(start_state, LHS, stoch_rate, state_change_array)

Esto le permite tomar múltiples argumentos

1
Redfer 22 jul. 2020 a las 10:26

Creo que el error se debe a que está dando 50 parámetros como argumentos para el paralelofunc, que definió como solo un argumento. Tal vez intente agregar list () para que sea solo un argumento, que contiene los 50 números. Sin embargo, no sé si el número de números es alto.

0
Francisco Parrilla 22 jul. 2020 a las 10:30