El día 21 de diciembre de 2011 03:45, gmail <manuelcorte...@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 _______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/