2011-12-22 7 views
5

Necesito establecer un límite de tiempo para una función de python que utiliza algunos elementos de multiprocesamiento (no sé si es importante). Algo como esto:Sincronización de una función de multiprocesamiento

function(a_list): 

    p1 = Process(a_list[0:len(a_list/2)]) 
    p2 = Process(a_list[len(a_list)/2: len(a_list)]) 

    //start and join p1, p2 

miro alrededor de la red y me encontré con un tiempo de espera decorador pero se ve bastante complicado y detallado (soy novato en decoradores). Lo que quiero es una cosa simple.

EDIT:

creo que lo hice demasiado simple. mi programa itera sobre la función anterior y almacenar el resultado en una lista algo como esto:

while(something): 

    retval = function(some_list) # here I need the time out thing 

    # if function timed out then skip 

    ris_list.append(retval) 

Respuesta

11

usted debería ser capaz de hacer eso con este código:

process.join(timeout) 
if process.is_alive(): 
    process.terminate() 

Así que en lugar de establecer un tiempo de espera en la función, puede unirse con un tiempo de espera del proceso y si el proceso no ha terminado después de ese tiempo de espera, entonces resuélvelo.

Cuestiones relacionadas