Python 强大的信号库 blinker 入门教程

本文介绍了Python的信号库blinker,包括信号的定义、使用方法,如命名信号、匿名信号和组播信号。详细阐述了blinker在Flask中的应用,通过示例展示了如何自定义信号和使用Flask内置信号,强调了解耦应用程序的重要性。同时,总结了信号通信的优点和局限性。
摘要由CSDN通过智能技术生成

1、信号

信号是一种通知或者说通信的方式,信号分为发送方和接收方。发送方发送一种信号,接收方收到信号的进程会跳入信号处理函数,执行完后再跳回原来的位置继续执行。

常见的 Linux 中的信号,通过键盘输入 Ctrl+C,就是发送给系统一个信号,告诉系统退出当前进程。

信号的特点就是发送端通知订阅者发生了什么。使用信号分为 3 步:定义信号,监听信号,发送信号。

Python 中提供了信号概念的通信模块,就是blinker。

Blinker 是一个基于 Python 的强大的信号库,它既支持简单的点对点通信,也支持点对多点的组播。Flask 的信号机制就是基于它建立的。Blinker 的内核虽然小巧,但是功能却非常强大,它支持以下特性:

  • 支持注册全局命名信号
  • 支持匿名信号
  • 支持自定义命名信号
  • 支持与接收者之间的持久连接与短暂连接
  • 通过弱引用实现与接收者之间的自动断开连接
  • 支持发送任意大小的数据
  • 支持收集信号接收者的返回值
  • 线程安全

2、blinker 使用

安装方法:

pip install blinker

2.1 命名信号

from blinker import signal

# 定义一个信号
s = signal('king')


def animal(args):
    print('我是小钻风,大王回来了,我要去巡山')

# 信号注册一个接收者
s.connect(animal)

if "__main__" == __name__:
    # 发送信号
    s.send()

2.2 匿名信号

blinker 也支持匿名信号,就是不需要指定一个具体的信号值。创建的每一个匿名信号都是互相独立的。

from blinker import Signal

s = Signal()

def animal(sender):
    print('我是小钻风,大王回来了,我要去巡山')

s.connect(animal)

if "__main__" == __name__:
    s.send()

2.3 组播信号

组播信号是比较能体现出信号优点的特征。多个接收者注册到信号上,发送者只需要发送一次就能传递信息到多个接收者。

from blinker import signa
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,Python中的Blinker是一个用于实现事件、信号和观察者模式的。它提供了一种简单而灵活的方式来处理事件和信号的发布与订阅。您可以使用Blinker来创建自定义事件或使用现有的事件,以便在应用程序中触发和监听这些事件。 要使用Blinker,您需要首先安装它。可以使用pip工具运行以下命令进行安装: ``` pip install blinker ``` 一旦安装完成,您就可以在代码中导入blinker模块并开始使用它。您可以创建一个信号对象并连接相应的监听器函数来处理该信号的触发。以下是一个简单的示例: ```python from blinker import signal # 创建一个新的信号对象 my_signal = signal('my_signal') # 定义一个监听器函数 def handle_my_signal(sender): print(f"Received signal from: {sender}") # 连接监听器函数到信号 my_signal.connect(handle_my_signal) # 触发信号 my_signal.send('example_sender') ``` 在这个例子中,我们创建了一个名为`my_signal`的信号对象,并定义了一个名为`handle_my_signal`的监听器函数。然后,我们将这个监听器函数连接到信号上,并通过调用`send`方法来触发信号。当信号被触发时,与之连接的监听器函数将被调用,并传递一个发送者参数。 使用Blinker,您可以在应用程序中实现更复杂的事件和信号处理逻辑。请查阅Blinker官方文档,以了解更多关于该的详细信息和用法示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值