Estoy usando multiprocessing.Process para evitar que alguna función se ejecute durante demasiado tiempo.

Me gustaría usar pathos en lugar de multiprocessing de python (debido a su capacidad para manejar cosas que el paquete estándar de multiprocesamiento no puede), pero parece que falta alguna funcionalidad: no puedo encuentre cualquier cosa en pathos que permita join con un argumento de tiempo de espera.

Espero que haya algo por el estilo que me permita terminar un proceso una vez que haya pasado algún tiempo.

(Estoy usando Windows, por lo que la alternativa más simple, usar signal, no es posible y las alternativas parecen extremadamente complicadas)

0
user1999728 15 ene. 2017 a las 15:48
1
¿Ha mirado concurrent.futures?
 – 
Roland Smith
15 ene. 2017 a las 17:01
Ni siquiera sabía que esto existía. Sin embargo, todavía no funcionará en el intérprete interactivo de acuerdo con la documentación, que es una característica que espero usar.
 – 
user1999728
15 ene. 2017 a las 17:43

1 respuesta

La mejor respuesta

Soy el autor de pathos. Es posible que desee probar multiprocess, que es una bifurcación de multiprocessing (y ​​es lo que está debajo de pathos). Ya debería tenerlo instalado si tiene pathos instalado.

Puede acceder a Process de cualquiera de estas dos formas, donde tiene todas las mismas funciones que en multiprocessing (más las capacidades de serialización adicionales de dill):

>>> import pathos
>>> pathos.helpers.mp.Process
<class 'multiprocess.process.Process'>
>>> import multiprocess
>>> multiprocess.Process
<class 'multiprocess.process.Process'>

Entonces, cualquier objeto encontrado en multiprocessing con un argumento timeout también se puede encontrar como arriba.

3
Mike McKerns 20 ene. 2017 a las 19:39
Gracias. si mal no recuerdo, intenté acceder a pathos.helpers.mp, pero su atributo __file__ parecía llevarme de regreso al multiprocessing original, así que asumí que era solo una referencia al paquete estándar de multiprocesamiento de Python .
 – 
user1999728
2 feb. 2017 a las 22:17