fgdfg 发表于 2017-5-3 07:01:56

python 消息分发组件 blinker 学习

  blinker 是一个通过消息机制来实现解耦合库,提供了强大的功能。不过这个来的消息是通过的消息并非异步消息,像实现异步消息的自己修改下。
  官网地址:  http://discorporate.us/projects/Blinker/
  看代码学技术 
  #!/usr/bin/env python
  #coding=utf-8
  '''
  Created on 2011-9-6
  @author: bruce
  '''
  from blinker import signal
  from blinker.base import Signal
  #注册一个命名消息
  ready = signal('ready')
  #创建一个消息订阅者
  def subscriber(sender):
  #    print sender.name
  print("Got a signal sent by %r" % sender)
  #消息发送者
  class Processor:
  def __init__(self, name):
  self.name = name
  self.id = 'test_001'
  def go(self):
  #发送消息
  ready.send(self)
  print("Processing.")
  def __repr__(self):
  return '<Processor %s>' % self.name
  def b_subscriber(sender):
  print("Caught signal from processor_b.")
  def xxx(sender):
  print 'xxxx'
  processor_b = Processor('b')
  ready.connect(subscriber)
  ready.connect(b_subscriber, sender=processor_b)
  ready.connect(xxx, sender=processor_b)
  #processor_b.go()
  #----------------------------------------------------------------------------------
  #注册一个消息
  send_data = signal('send-data')
  #关联消息
  @send_data.connect
  def receive_data(sender, **kw):
  print("Caught signal from %r, data %r" % (sender, kw))
  return 'received!'
  #发送消息
  result = send_data.send('anonymous', abc=123)
  #----------------------------------------------------------------------------------
  #匿名消息
  class AltProcessor:
  on_ready = Signal()
  on_complete = Signal()
  def __init__(self, name):
  self.name = name
  def go(self):
  self.on_ready.send(self)
  print("Alternate processing.")
  self.on_complete.send(self)
  def __repr__(self):
  return '<AltProcessor %s>' % self.name
  apc = AltProcessor('c')
  @apc.on_complete.connect
  def completed(sender):
  print "AltProcessor %s completed!" % sender.name
  apc.go()
  #----------------------------------------------------------------------------------
  dice_roll = signal('dice_roll')
  @dice_roll.connect_via(1)
  @dice_roll.connect_via(3)
  @dice_roll.connect_via(5)
  def odd_subscriber(sender):
  print("Observed dice roll %r." % sender)
  result = dice_roll.send(3)
页: [1]
查看完整版本: python 消息分发组件 blinker 学习