[pyar] Se busca: Backport de modulo de multiprocessing de py3k a 2.7

Andres Riancho andres.riancho en gmail.com
Vie Ene 30 08:56:33 ART 2015


2015-01-30 6:20 GMT-03:00 Alejandro Santos <listas en alejolp.com>:
> Combinar multiprocessing y threading puede ser problematico, por eso
> desde la 3.4 existe lo que vos estás buscando.
>
> El orden de crear cada uno es importante, vos estas primero creando el
> thread y despues el multiprocess, podes hacerlo al reves para no
> heredar con el fork los sockets de tus threads.
>
> $ python qqq.py
> frames from main1: [(140696442406656, <frame object at 0x75d1c0>)]
> frames from main2: [(140696318297856, <frame object at
> 0x7ff664000f40>), (140696442406656, <frame object at 0x75d1c0>)]
> frames from worker: [(140696442406656, <frame object at 0x7c6530>)]

Claro, pero igual este era simplemente un ejemplo de las cosas
inesperadas que pasan con multiples threads y fork(), otra que me paso
es que las tools de profiling (meliae, yappi, pytracemalloc) se
vuelven locas y no reportan cosas coherentes. Algunas que he escuchado
que pasan son dead-locks (en malloc por ejemplo) y en otras partes
donde haya locks mi codigo/librerias.

> Como alternativa podes hacer manualmente un exec de un python para
> tener algo limpio sin thread del parent (asi funcionan spawn y
> forkserver), pero tenes que hacer la sincronizacion a mano.

Si, estaba pensando un poco en eso y creo que llegue a una
arquirectura, algo compleja pero es lo que hay...
    * El MainProcess levanta un proceso Parser usando subprocess.Popen
    * El proceso Parser levanta un server de zerorpc-python [0] y
escucha en un unix-socket
    * MainProcess utiliza zerorpc-python para enviar datos, recibir
resultados, etc. del proceso remoto
    * El proceso Parser implementa un signal handler para Ctrl+C, en
el cual hace zerorpc.stop(), cleanup, etc.
    * Si MainProcess ve que el proceso Parser tarda mas que un tiempo
determinado en completar una operacion entonces le manda un signal
para que el proceso muera y levanta otro. Algo similar ocurre cuando
MainProcess ha terminado y quiere matar a Parser para cerrar
limpiamente.

Esta es la manera que encontre hasta ahora para a) tener un proceso
100% distinto y b) comunicarme limpiamente con él

Algun otro metodo de RPC que recomienden para python fuera de zerorpc?

PD: Ya me parecia raro no recibir una respuesta de Alejandro "tiene
todas las respuestas a mis preguntas" Santos :)

[0] https://github.com/dotcloud/zerorpc-python

>
>
> 2015-01-28 2:41 GMT+01:00 Andres Riancho <andres.riancho en gmail.com>:
>> Lista,
>>
>>     Ando buscando un backport del modulo de multiprocessing de py3k a
>> 2.7. Lo mas cercano que encontre fue el billiard de celery, pero al
>> parecer todavia su backport no esta terminado/funcional.
>>
>>     Lo que me interesa de la nueva version del modulo en py3k es la
>> funcionalidad de "spawn" [0] para los sub-procesos, la cual es
>> diferente de la unica provista en 2.7 que es os.fork()
>>
>>     Si estan interesados en el porque de esta necesidad pueden leer [1][2].
>>
>> [0] https://docs.python.org/3.4/library/multiprocessing.html#multiprocessing.set_start_method
>> [1] http://www.linuxprogrammingblog.com/threads-and-fork-think-twice-before-using-them
>> [2] https://gist.github.com/andresriancho/957180a06be43fa9c654
>>
>> Saludos,
>> --
>> Andrés Riancho
>> Project Leader at w3af - http://w3af.org/
>> Web Application Attack and Audit Framework
>> Twitter: @w3af
>> GPG: 0x93C344F3
>> _______________________________________________
>> 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
>
>
>
> --
> Alejandro Santos
> _______________________________________________
> 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