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

Andres Riancho andres.riancho en gmail.com
Mar Ene 6 15:00:10 ART 2015


Claudio,

2015-01-05 20:45 GMT-03:00 Claudio Freire <klaussfreire en gmail.com>:
> 2015-01-05 20:42 GMT-03:00 Roberto Alsina <ralsina en netmanagers.com.ar>:
>> On 05/01/15 20:37, Claudio Freire wrote:
>>>
>>> 2015-01-05 20:30 GMT-03:00 Andres Riancho <andres.riancho en gmail.com>:
>>>>
>>>> Alejandro,
>>>>
>>>> On Mon, Jan 5, 2015 at 7:36 PM, Alejandro Santos <listas en alejolp.com>
>>>> wrote:
>>>>>
>>>>> 2015-01-05 20:58 GMT+01:00 Andres Riancho <andres.riancho en gmail.com>:
>>>>>>
>>>>>>      La pregunta entonces es... que otras soluciones tengo a este
>>>>>> problema?
>>>>>>
>>>>> import multiprocessing
>>>>> import time
>>>>>
>>>>> def exec_with_timeout(f, args, timeout):
>>>>>      p = multiprocessing.Process(target=f, args=args)
>>>>>      p.start()
>>>>>      p.join(timeout)
>>>>>      if p.is_alive():
>>>>>          p.terminate()
>>>>>
>>>>> def bad_func(t):
>>>>>      while True:
>>>>>          time.sleep(t)
>>>>>
>>>>> exec_with_timeout(bad_func, (5.0, ), 0.1)
>>>>
>>>>      Gracias por la buena propuesta, despues de enviar el email estuve
>>>> viendo eso y creo que en una gran cantidad de casos sirve pero... a mi
>>>> no me va a servir ya que la respuesta de la libreria es un objeto que
>>>> NO se puede serializar, por lo que no lo puedo pasar entre el
>>>> subproceso (multiprocessing.Process) y el proceso principal.
>>>>
>>>>      Alguna idea de como hacer un workaround de eso? Estuve leyendo un
>>>> poco sobre multiprocessing.Namespace, pero no estoy seguro, deberia
>>>> probarlo.
>>>
>>>
>>> Podés intentar lo mismo con threading.Thread en vez de
>>> multiprocessing.Process.
>>
>>
>> El problema es que matar threads no es una ciencia exacta.
>
> Si, bueno, habría que quitar el terminate y dejarlo corriendo.

Bueno, eso no seria lo ideal ya que estaría consumiendo CPU en ese
thread (cuyo resultado ya no se va a usar) y haciendo todo el resto de
los threads mas lentos.

> De hecho, imagino que alguna razón para llamar a la librería habrá, y
> alguna razón por la que tarda habrá, y otra razón por la que no hace
> falta esperar el resultado habrá, pero que dejar que la librería
> termine de hacer su trabajo es también imagino un requerimiento.

No, terminar el trabajo no es un requerimiento. Este problema lo
encontre en el crawler de w3af, donde si para una de miles y miles de
paginas que se crawlean no hay problema.

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