[pyar] Timeouts para codigo de terceras partes: PyThreadState_SetAsyncExc?

Roberto Alsina ralsina en netmanagers.com.ar
Mar Ene 6 19:54:45 ART 2015


On 06/01/15 15:35, Andres Riancho wrote:
> 2015-01-06 15:31 GMT-03:00 Roberto Alsina <ralsina en netmanagers.com.ar>:
>> On 06/01/15 15:14, Andres Riancho wrote:
>>> Al fin termine haciendo esto [0]:
>>>
>>>    * Creo un multiprocessing.Pool
>>>    * Creo un "shared dict" donde el subproceso guarda que es lo que esta
>>> procesando y su pid [1]
>>>    * El parsing se hace en el subproceso, por medio del pool. El main
>>> process se queda esperando a que el subprocess termine [2]
>>>    * En caso de que no termine en menos que el timeout, se mata al
>>> proceso usando la informacion guardada en [1](*)
>>>    * Ya que puede haber varios procesos en el pool, hay una minima sync
>>> para que dos distintos threads del main process no manden a parsear la
>>> misma cosa [3], esto lo arme con eventos.
>>>
>>> Lo que no me gusto de mi implementacion:
>>>
>>>     * `os.kill(pid, signal.SIGTERM)`, en alguna race condition extraña,
>>> puede llegar a matar un proceso que no tiene nada que ver con w3af,
>>> oops!
>>
>> Por eso no tenés que matar los procesos del pool así, si no con
>> Process.terminate()
> No encontre una mejor manera de saber quien del pool esta corriendo
> que cosa como para matarlo
>
> Alguna idea de como hacerlo para hacer un Process.terminate() ?

Sin ver código, no, ni idea de que es lo que estás diciendo :-)

En general, lo que haría es crear el pool, mandar todos los trabajos con 
apply_asinc, obtener una cantidad de objetos result, obtener los 
resultados usando result.get() con timeout.

Cuando pasó el timeout, ya está, tenés que matar todos los workers y 
podés usar pool.terminate()

Si necesitas tener algun accounting propio de que proceso hace que cosa, 
podes usar el argumento initializer del Pool.

Por otro lado, la descripción que hacés del problema suena a que usás UN 
subproceso, en cuyo caso para qué querés usar un pool?


More information about the pyar mailing list