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

Andres Riancho andres.riancho en gmail.com
Mar Ene 6 21:04:58 ART 2015


2015-01-06 19:54 GMT-03:00 Roberto Alsina <ralsina en netmanagers.com.ar>:
> 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()

Ah, pero ahi hay un problema porque si tengo un pool con 2 workers, 1
solo es el que timeouteo, no quiero matar (podria, pero no quiero) al
otro inocente que esta al lado del que timeouteo ;)

> 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?

Estoy usando cpu count / 2

> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar



-- 
Andrés Riancho
Project Leader at w3af - http://w3af.org/
Web Application Attack and Audit Framework
Twitter: @w3af
GPG: 0x93C344F3


More information about the pyar mailing list