`
isiqi
  • 浏览: 16548111 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

用 python-message 为程序库和日志模块解耦

阅读更多

赖勇浩(http://laiyonghao.com)
之前我说过 python-message 与常见的 signal/slot 不同,处理函数不需要知道谁会发出一条信息,而发出信息的对象也不必知道是否有人处理它。这个与众不同的特性,显然有更宽广的适用范围,下面就是其中一个例子。
假定你在编写一个非常牛X的程序库,姑且为它取名为 foo,里面有一个函数叫 bar,你就想啊,这么牛X的一个函数,肯定要写一下 log 啊,所以你就写了以下代码:

你高高兴兴发了版本,大家都过得很好。过了几天,公司的另一个项目组听闻牛人您写了个库叫 foo,非常好用,就拿去用了。当天,快下班的时候,你被拖去救火,因为出 Bug 了呀。你查看了很久日志,都没有发现他们调用 bar() 的痕迹,一问,原来他们是用 logging 的,标准输出在做 Daemon 的时候被重定向到 /dev/null 去了……。
好吧,你忍。但没法忍啊,你们原来的项目又不用 logging,你在程序库里引入 logging 谁来初始化它呢?就算你引入了 logging,你们项目获取 logger 可能是用 logging.getLogger('prjA'),另一个项目可能是用 logging.getLogger('prjB'),日后还有新项目呢,想到这个你就蛋疼了。忍痛割爱,把 print 语句给删除掉?你又怕日后出了问题你自己都找不到 Bug 那还不是自己加班自己苦……。
这个时候,不妨让 python-message 来帮你手,轻松改一下 bar() 函数

而在你的项目中,只需要在项目开始处加上这样的代码:

而很类似地,在另一个项目 prjA 里,你可以把 handle_foo_log_msg() 稍作修改:

在另一个 prjB 里则可能是这样:

如果还有另一个 prjC 使用了其它的 log,相信此时你也可以轻松应对了,:)。

分享到:
评论

相关推荐

    Python库 | django-aws-message-1.4.tar.gz

    Python是一种广泛使用的高级编程语言,以其简洁、易读的语法和丰富的库生态系统而闻名。在本资源中,我们关注的是一个名为`django-aws-message`的库,它与Django框架集成,为在Amazon Web Services (AWS)上处理消息...

    PyPI 官网下载 | tencentcloud-sdk-python-cmq-3.0.538.tar.gz

    PyPI(Python Package Index)是Python开发者的重要资源库,提供了大量的开源Python库供全球用户下载和使用。本文将深入探讨在PyPI官网上下载的“tencentcloud-sdk-python-cmq-3.0.538.tar.gz”资源,它是腾讯云提供...

    PyPI 官网下载 | qpid-python-0.26.tar.gz

    在实际使用`qpid-python`时,开发者需要了解AMQP的基本概念,如exchange(交换机)、queue(队列)、binding(绑定)等,并熟悉如何使用库提供的API创建连接、建立会话、发送和接收消息。通过`qpid-python`,Python...

    简单的python事件库 -Python-下载

    "PyEventE"是一个Python事件库,它允许程序员通过发布和订阅事件的方式来解耦代码,实现模块间的通信。 事件驱动编程是一种编程范式,其中程序由一个或多个事件处理器组成,这些处理器等待特定的事件发生,如用户...

    PyPI 官网下载 | tencentcloud-sdk-python-tdmq-3.0.440.tar.gz

    1. **消息发布与订阅**:允许应用程序向主题发布消息,其他应用程序可以订阅这些主题并消费消息,实现了生产者和消费者的解耦。 2. **消息顺序保证**:对于需要顺序处理的业务场景,TDMQ可以保证在同一分区内的消息...

    Python库 | python_logging_rabbitmq-1.1.1-py2.py3-none-any.whl

    首先,我们要了解Python的日志模块(logging)。Python的标准库提供了强大的日志记录功能,包括不同级别的日志(DEBUG、INFO、WARNING、ERROR、CRITICAL),以及自定义日志格式、处理器和过滤器。`python_logging_...

    Python库 | aio-pika-5.0.0b3.tar.gz

    总结来说,`aio-pika`作为Python异步AMQP客户端,为开发者提供了与RabbitMQ高效交互的工具,广泛应用于需要高并发、解耦和可靠消息传递的场景。结合Python的asyncio框架,它能帮助构建高性能、低延迟的后端服务。

    Python库 | pwbus-0.0.18-py2.py3-none-any.whl

    Python库是具有特定功能的代码集合,可以被其他Python程序导入和使用。它们涵盖了各种领域,如数据处理、网络通信、科学计算、机器学习等。开发者可以通过Python的`import`语句来调用库中的函数或类,从而实现特定的...

    Python库 | gcloud-aio-pubsub-1.0.1.tar.gz

    3. Python库:`gcloud-aio-pubsub`作为一个Python库,为Python开发者提供了与Google Cloud Pub/Sub服务交互的简洁API。 二、主要功能 1. 发布与订阅:`gcloud-aio-pubsub`库提供了创建主题(Topic)、发布消息到...

    消息中间件-message-plugin.zip

    消息中间件在IT行业中扮演着至关重要的角色,它充当了应用程序之间通信的桥梁,使得系统间的解耦、异步处理和扩展性得以实现。在"message-plugin.zip"这个压缩包中,我们很可能是找到了一个消息插件的源码仓库,名为...

    Python库 | fedmsg-0.2.5.tar.gz

    Fedmsg的核心是基于AMQP(Advanced Message Queuing Protocol)协议,这是一种异步消息传递标准,它允许多个应用程序之间进行解耦通信。 Fedmsg库在Python开发中扮演着中间件的角色,它允许不同的服务发布和订阅...

    Python库 | pulsar_client-2.1.0-cp27-cp27m-manylinux1_x86_64.whl

    标题中的"Python库 | pulsar_client-2.1.0-cp27-cp27m-manylinux1_x86_64.whl"指的是一款名为Pulsar Client的Python库,其版本号为2.1.0,是专为Python 2.7编译的,具有cp27m这个Python ABI(Application Binary ...

    Python库 | oslo.messaging-5.27.0-py2.py3-none-any.whl

    - **AMQP协议支持:** osol.messaging库主要基于Advanced Message Queuing Protocol (AMQP),这是一种标准的、开放的消息中间件协议,用于异步通信和解耦系统组件。 - **驱动程序体系结构:** 库内包含多种消息...

    Python库 | rabbitadmin-1.0.1.linux-x86_64.tar.gz

    1. **Python库**:Python库是预编写好的代码模块,开发者可以通过导入这些库来扩展Python的功能,例如Numpy用于科学计算,Pandas用于数据分析,Django和Flask用于Web开发。Rabbitadmin可能是处理RabbitMQ的Python...

    怎样使用Python脚本日志功能

    在Python编程中,日志功能是非常重要的一部分,它允许开发者记录程序运行时的事件和错误信息,便于调试和排查问题。在上述需求中,我们主要关注如何在自动化脚本工具中实现灵活、高效的日志系统。 首先,我们需要...

    Python库 | amqp_connection-1.4.3.tar.gz

    在实际开发中,这样的库可以方便地集成到Python后端项目中,以便利用消息队列来处理高并发、解耦和异步任务。 消息队列如RabbitMQ、Apache Qpid或ActiveMQ等通常使用AMQP协议,它们作为中间件,接收、存储并转发...

    Python库 | stompest.async-2.2.4.tar.gz

    `stompest.async` 是一个针对Stomp协议的Python异步库,主要用于在Python应用程序中处理Stomp消息传递。Stomp(Simple (or Streaming) Text Oriented Messaging Protocol)是一种轻量级、跨平台的消息协议,它使得...

    Python库 | kombu-2.2.4.tar.gz

    总的来说,kombu是一个强大而灵活的消息队列库,为Python开发者提供了简单易用的API来实现异步任务处理和分布式系统通信。无论是在小型项目还是大型复杂系统中,kombu都能发挥重要作用,提高系统的可扩展性和可靠性...

    python通过stomp协议和hornetq进行连接

    Python是一种广泛使用的编程语言,尤其在处理数据和自动化任务方面表现突出。STOMP(Simple Text ...HornetQ的灵活性和STOMP的易用性相结合,使得Python应用程序能够方便地与其他系统交换消息,实现异步通信和解耦。

    Python库 | AMQPStorm-2.0.0.tar.gz

    AMQPStorm是一个Python库,专为实现Advanced Message Queuing Protocol (AMQP) 0-9-1版本而设计。AMQP是一种应用层协议,广泛用于消息中间件,如RabbitMQ,它允许分布式系统中的应用程序进行异步通信和数据交换。...

Global site tag (gtag.js) - Google Analytics