[Python-es] Como puedo testear si una python extensión tiene race conditions.

lasizoillo lasizoillo en gmail.com
Lun Jul 9 10:40:01 CEST 2012


El día 8 de julio de 2012 22:14, francis <francismb en email.de> escribió:
> El software en está escrito en C y corre en un systema embedido
> pero muchos de los tests los realizo en python (unittest) en el PC
> transformado ese software en una extension para python (wrapper
> a ctypes). Lo que me gustaria testear es que la implementación en
> C no tiene “race conditions” en ciertas áreas (por ejemplo una
> funcion lee de un buffer en un hilo diferente al hilo que rellena el
> buffer). Cómo se puede simular eso desde python? Se puede realizar
> eso con threads desde python, o el GIL va a evitar que pueda testear
> eso?
>

Python permite a los módulos escapar del GIL. En principio se puede
usar siempre que no llames objetos python desde los mismos. Aunque no
está de más que el código de tu módulo sea thread safe ;-)

http://docs.python.org/c-api/init.html#releasing-the-gil-from-extension-code

Para tí que estás haciendo el wraper con ctypes te interesa más esto:

"The Python global interpreter lock is released before calling any
function exported by these libraries, and reacquired afterwards."
http://docs.python.org/library/ctypes.html#loading-shared-libraries

Vamos, que el GIL va a estar dehabilitado en tus llamadas al código C
y no te va a librar de ningún race-condition.

Así que supongo que puedes hacer un test que corra un porrón de veces
para ver si surge algún race condition. Aunque que el test no
encuentre ninguno no garantiza que no existan :-(

Un saludo,

javi


Más información sobre la lista de distribución Python-es