[pyar] Cargar librería una única vez corriendo muchos procesos

Andres Riancho andres.riancho en gmail.com
Jue Ago 6 09:15:15 ART 2015


Medir uso de memoria es algo difícil cuando usas multiprocessing, no
todas las tools muestran la data de la misma manera y hay veces que
suman variables que no tienen tanto sentido que esten juntas.

Ojo con una cosa... multiprocessing (al menos en python2) usa os.fork,
por lo que te vas a encontrar en esta situacion:

"""
In Unix systems equipped with virtual memory support (practically all
modern variants), the fork operation creates a separate address space
for the child. The child process has an exact copy of all the memory
segments of the parent process, though if copy-on-write semantics are
implemented, the physical memory need not be actually copied. Instead,
virtual memory pages in both processes may refer to the same pages of
physical memory until one of them writes to such a page: then it is
copied. This optimization is important in the common case where fork
is used in conjunction with exec to execute a new program: typically,
the child process performs only a small set of actions before it
ceases execution of its program in favour of the program to be
started, and it requires very few, if any, of its parent's data
structures.
"""

Es decir, el proceso hijo esta utilizando X memoria virtual, que en
realidad no termina siendo memoria física porque no escribe
(idealmente) nunca a esas páginas de memoria (porque es la memoria
utilizada por una librería).

Volviendo a mi primer oración, lo que puede llegar a pasar es que
cuando mediste memoria (con alguna tool?) no se hizo una diferencia
entre memoria virtual y física utilizada por el hijo, llevandote a
creer una cosa que no era.

Todo esto es solo una teoria pero espero te sirva para llegar a la verdad :)

2015-08-06 0:20 GMT-03:00 Matías Lang <shareman1204 en gmail.com>:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA256
>
> Buenas noches comunidad! Estamos laburando con opencv y tenemos la
> necesidad de procesar múltiples streams de video en realtime,
> optimizando lo mejor posible el consumo de ram y cpu.
> Actualmente tenemos un script Python que se encarga de un solo stream
> de video para que sea sencillo correrlo y detenerlo cuando sea
> necesario. Esto lo hace un script separado.
> El problema que encontramos es que por cada script que se corre se
> cargan en memoria los 45MB que usa opencv, haciendo que para correr 10
> procesos en simultáneo se ocupen 450MB (no es viable). Lo ideal sería
> que opencv se cargue una sola vez en memoria pero no encontramos
> información al respecto sobre cómo hacerlo.
> Usando multiprocessing se sigue teniendo el mismo problema pero con
> multithreading no.
> Estamos buscando sugerencias para evitar si es posible el uso de
> multithreading por cuestiones de complejidad para administrar cada
> instancia. Si no lo ven posible vendrían bien algunas sugerencias para
> migrar y no morir en el intento :D.
> Saludos!
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v2
>
> iQIcBAEBCAAGBQJVwtKHAAoJEOYNHtvg7gKb8NEP/0gup5C81SO1TTihUpsQNQm4
> fx8PTQRJ/n7eXA5CTvYAJJFMMGrVgTa+mPVvepTZrKf34EPqsQR6dFRUilID1TXV
> AUs2id+c8v0XmDttnKx09odw2r8WykhAHr4H4K0/0Hlnpm+l4R8a0tMn7QyP2bRc
> n9C8LG0v4Ty4ZtrX+uqJWgcvldykmweCGbDcRmfDyXmcCZDePE1J3La86Sq7bZCY
> QJabqXLm2ODOpEmOUUJayWME5j7vV169TJaX3jsg8OHzdte1lNqWXjUkA5Aaw8FO
> R5TyIdr5JUX9KJZ517GVSEEJWLeNngjIqOLY/Og0SYUVsf61fPBtXsi0Q4x6j3Q6
> KGY4ZTpwscW+tLZrMJrT6E+dOwl/HeVf2Fw75BU2yrKkf2Vsv6O/9YBZlTYFR/nd
> WSr/YVpIPRJULZm2lh/nPsC8uq1B2J+iQF6JPibKjdOE9+2/ORp4MYDp8zsoi6qR
> XM/AMTzfxd7qDeRZhFyjlMaUSDe0d0Xdj06rhXgv3xN8KLR5oSpSQeDZCn4UoHgX
> cqXhkMRlqRqLzn1gxueno9S2RT5LYQppL9hY3ZCvV9dc3jDUdZlCNgHR7d5sznIs
> TCah6KPemFDwustStmNksL+j3OkC1qKRaF720uaYNljxFF9bMTD496Lfz9WtXcdK
> GpopBWJXWzTuRWixhjS1
> =g4rQ
> -----END PGP SIGNATURE-----
> _______________________________________________
> 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