Patrones de diseño de Python: observador

En este patrón, los objetos se representan como observadores que esperan a que se active un evento. Un observador se adhiere al sujeto una vez que ocurre el evento especificado. A medida que ocurre el evento, el sujeto les dice a los observadores que ha ocurrido.

El siguiente diagrama UML representa el patrón del observador:

¿Cómo implementar el patrón de observador?

Veamos ahora cómo implementar el patrón de observador.

import threading
import time
import pdb

class Downloader(threading.Thread):
   
   def run(self):
      print 'downloading'
      for i in range(1,5):
         self.i = i
         time.sleep(2)
			print 'unfunf'
         return 'hello world'

class Worker(threading.Thread):
   def run(self):
      for i in range(1,5):
         print 'worker running: %i (%i)' % (i, t.i)
         time.sleep(1)
         t.join()

         print 'done'

t = Downloader()
t.start()

time.sleep(1)

t1 = Worker()
t1.start()

t2 = Worker()
t2.start()

t3 = Worker()
t3.start()

Salida

El programa anterior genera la siguiente salida:

Explicación

El código anterior explica el procedimiento para descargar un resultado en particular. Según la lógica del patrón del observador, cada objeto se trata como un observador. Imprime la salida cuando se activa el evento.