[Python-es] ayuda con hilos de ejecución
Chema Cortes
pych3m4 en gmail.com
Mie Dic 21 19:14:45 CET 2011
El día 21 de diciembre de 2011 03:45, gmail <manuelcortez00 en gmail.com> escribió:
> Buscaré en internet acerca de la programación utilizando este tipo de
> elementos y gracias a todos por su ayuda.
En un rato libre que tenía, te he creado este programa que espero
ilustre algo cómo sería.
He creado una clase "Crono" cuyas instacias serán las que midan el
tiempo, accesibles en multihilo. Los objetos cronos pueden establecer
un "contexto" de ejecución para sentencias 'with' que facilitan la
puesta en marcha y la parada del cronómetro, tal como se ve en el
ejemplo más adelante:
#!/usr/bin/python
#-*- coding: utf-8 -*-
import time
import threading
class Crono(object):
def __init__(self):
self.lock=threading.Lock()
self._reset()
def _reset(self):
#reset sin bloqueo previo
self._lap=0.0
self._last_time=time.time()
def reset(self):
#reset con bloqueo
locked=self.lock.acquire(False)
if locked:
self._reset()
self.lock.release()
return locked
@property
def seconds(self):
#devuelve self._lap si no hay bloqueo
#en caso contrario, calcula el tiempo transcurrido
if self.lock.acquire(False):
result=self._lap
self.lock.release()
else:
result=time.time()-self._last_time
return result
def __enter__(self):
self.lock.acquire()
self._reset()
def __exit__(self,exc_type, exc_value, traceback):
self._lap=self.seconds
self.lock.release()
def contador(maxsegs, crono, evt):
with crono:
while crono.seconds<=maxsegs and not evt.is_set():
evt.wait(.1) #espera de 1 décima de segundo
evt=threading.Event()
crono=Crono()
#Creamos el hilo y lo ejecutamos con 100 segundos como límite del crono
t=threading.Thread(target=contador, kwargs=dict(maxsegs=100,
crono=crono, evt=evt))
t.start()
t.join(2) #esperamos dos segundos y miramos cómo va el cronómetro
print "Han pasado %f segundos"%crono.seconds
t.join(2) #esperamos dos segundos
evt.set() #activamos el evento de terminación
t.join() #esperamos a que termine el hilo hijo
print "Han pasado un total de %f segundos"%crono.seconds
--
Hyperreals *R: http://ch3m4.org/blog
Quarks, bits y otras criaturas infinitesimales
Más información sobre la lista de distribución Python-es