handler

python 从小白开始 - logging模块

雨燕双飞 提交于 2020-01-23 11:11:30
logging模块 1、 日志级别 1 CRITICAL = 50 #FATAL = CRITICAL 2 ERROR = 40 3 WARNING = 30 #WARN = WARNING 4 INFO = 20 5 DEBUG = 10 6 NOTSET = 0 #不设置 2、 默认级别为warning,默认打印到终端 1 import logging 2 3 logging.debug('调试debug') 4 logging.info('消息info') 5 logging.warning('警告warn') 6 logging.error('错误error') 7 logging.critical('严重critical') 8 9 ''' 10 WARNING:root:警告warn 11 ERROR:root:错误error 12 CRITICAL:root:严重critical 13 ''' 3、 为logging模块指定全局配置,针对所有logger有效,控制打印到文件中 1 可在logging.basicConfig()函数中通过具体参数来更改logging模块默认行为,可用参数有 2 filename:用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样日志会被存储在指定的文件中。 3 filemode:文件打开方式

Android进阶之路——Handler机制

烈酒焚心 提交于 2020-01-22 22:09:06
Handler简介 Handler在日常开发中或多或少的都用过,在Android开发中是一个比较重要的知识点,希望通过这篇文章会使你对Handler有更全面的理解。 Hanlder设计的初衷或用途主要有两点: 在不同线程中执行任务。 执行定时任务。 Handler基本使用方式 下面代码展示了Handler使用的基本流程。 // 定义一个消息标识符 final int MESSAGE_WHAT_TEST = 100 ; // 1.创建一个Handler对象。 Handler handler = new Handler ( ) { @Override public void handleMessage ( Message msg ) { // 2. 重写handleMessage方法处理发送过来的Message // 判断Message类型 if ( msg . what == MESSAGE_WHAT_TEST ) { // 接收Message中的数据 String data = ( String ) msg . obj ; // 展示数据 textView . setText ( data ) ; } } } ; // 3. 新建一个Message对象承载要传输的数据。 Message msg = new Message ( ) ; // 4. 给Message设置一个标识符

后台开发学习笔记(十二、责任链模式)

北战南征 提交于 2020-01-22 11:14:19
不知不觉中来到了设计模式这部分,设计模式之前一直想学的,那时候都没什么驱动力,现在有了,一边学习一边写笔记,这种学习方法也是比较好的,毕竟有输出,写的过程中考虑都了好些东西,要不然写不清楚,不说了,进入主题,这次用的语言是C++。 12.1 引入 我看着别人说设计模式的时候,都会有引入的,不过也确实是,直接上来就说责任链模式,感觉有点奇怪,还是要先引入,通过生活的例子,再到抽象,然后到代码的实现,也才是我们程序员的必修课。 12.1.1 生活中的例子 我们要去银行贷款,小于1万的银行职员都可以审批,大于1万的银行职员就批不了了,需要上报经理,经理收到这个请求就来办理,但是经理的权限也是有限的,只能批到十万,再往上的批不了,需要向更高级的领导请示 像这种方式的,就是比较符合责任链模式,总要找到一个有权限的人来处理我这件事情。 12.1.2 原来的实现 如果按照我们以前惯有的思想,就是会在类的方法中,搞很多个if else if来判断哪一个人是有权限处理的。这样导致写的处理这个方法中,写了很多死代码,以后要添加其他的领导的话,就要直接修改这个方法的代码,确实不理想。所有需要抽象一种设计模式来解决这个问题。这个过渡的地方可以参考《大话设计模式》。 12.2 责任链模式 不知道引入写的怎么样,我感觉还是不好,不是专业的,并且也懒的写那种没有设计模式的代码,如果要好好看这种铺垫可以去看看

Netty进阶学习(五):Netty#initAndRegister#init()理解

痴心易碎 提交于 2020-01-22 08:40:26
背景 有哪些小知识点可以学习的? 有哪些逻辑处理可以学习的? 过程 init方法概览 说明 一般来说,使用Netty的最佳实践,我们会使用主从模式,就是bossGroup和workerGroup。而且bossGroup是一个线程的线程池,workerGroup一般是电脑内核数量的线程数的线程池。 在Netty中,pipeline中一定是添加的handler,所以这个ServerBootstrapAcceptor也是Handler类型的。 需要明确有一个对应关系。 线程池 处理器名称 选项 属性值 bossGroup(1) handler option attr workerGroup(process num) childHandler childOption childAttr 上图的临时变量是否是同一个实例呢? 由打印出来的结果,可知道,channel变量与ch变量是同一个引用变量。由此可知变量p和pipeline也是同一个变量。 小知识点累积 结果(注意是大花括号还是数组符合包含的) 核心知识点 ChannelInitializer 说明 ChannelInitializer是 一次性 添加handler的一个类。这里的一次性是指添加handler完成后,自己就会被移除。ChannelInitializer它自己也是Handler类型。 首先,需要明确自己

Netty快速入门(10)Reactor与Netty

吃可爱长大的小学妹 提交于 2020-01-22 08:24:02
Reactor模式 Reactor是1995年由道格拉斯提出的一种高性能网络编程模式。由于好多年了,当时的一些概念与现在略有不同,reactor模式在网络编程中是非常重要的,可以说是NIO框架的典型模式,一些经典的框架,比如Mina、Netty、Cindy都是此模式的实现。 我们来看看当年提出的通用模型: 上面的图形中: 1、Handle 可以理解为资源或者文件句柄,放在netty里面就是channel,就是我们实际要处理的东西 2、Event Handler和Concrete Event Handler 就是具体的事件处理器,对应netty中的handler接口和具体的handler 3、Synchronous Event Demultiplexer同步事件多路复用分发器,可以理解为nio中的select 4、Initiation Dispatcher,分发器,可以理解为nio中的循环,也就是netty中的EventLoop,处理各种事件 5、select(handlers)就是真正处理业务的地方 大家注意上面图形中的几个箭头,可以看出各个组件之间的关联关系。这个经典的模型当时并不是针对Java提出的,任何拥有这些组件的语言,都可以实现高性能的reactor模型。 单线程Reactor 基于Java,Doug Lea(Java并发包作者)提出了三种形式,单线程Reactor

btstack源码分析-主函数

馋奶兔 提交于 2020-01-22 07:49:07
主函数分析(port/windows-winusb/main.c): int main(int argc, const char * argv[]) { main_argc = argc; main_argv = argv; btstack_memory_init(); ... #if MAX_NR_HCI_CONNECTIONS > 0 //把hci_connection_storage挂到hci_connection_pool单向链表下,hci_connection_storage是hci_connection_t类型数组,MAX_NR_HCI_CONNECTIONS是数组个数 btstack_memory_pool_create(&hci_connection_pool, hci_connection_storage, MAX_NR_HCI_CONNECTIONS, sizeof(hci_connection_t)); #endif ... #if MAX_NR_GATT_CLIENTS > 0 btstack_memory_pool_create(&gatt_client_pool, gatt_client_storage, MAX_NR_GATT_CLIENTS, sizeof(gatt_client_t)); #endif ... btstack_run_loop

每周一个 Python 标准库 | signal

拥有回忆 提交于 2020-01-21 22:54:34
技术博客:https://github.com/yongxinz/tech-blog 同时,也欢迎关注我的微信公众号 AlwaysBeta ,更多精彩内容等你来。 信号是 Unix 系统中常见的一种进程间通信方式(IPC),例如我们经常操作的 kill -9 pid ,这里的 -9 对应的就是 SIGKILL 信号,9 就是这个信号的编号,SIGKILL 是它的名称。 由于不同版本的 *nux 的实现会有差异,具体请参照系统 API,可以使用 man 7 signal 查看所有信号的定义。 那么,信号有哪些使用场景呢?与其他进程间通信方式(例如管道、共享内存等)相比,信号所能传递的信息比较粗糙,只是一个整数。但正是由于传递的信息量少,信号也更便于管理和使用,可以用于系统管理相关的任务。例如通知进程终结、中止或者恢复等。每种信号用一个整型常量宏表示,以 SIG 开头,比如 SIGCHLD、SIGINT 等。 接收信号 Python 中使用 signal 模块来处理信号相关的操作,定义如下: signal . signal ( signalnum , handler ) signalnum 为某个信号,handler 为该信号的处理函数。进程可以无视信号,可以采取默认操作,还可以自定义操作。当 handler 为 signal.SIG_IGN 时,信号被无视(ignore);当

Java动态代理(invocation handler、cglib)简析

痞子三分冷 提交于 2020-01-21 18:46:43
What 代理模式 Java的一种设计模式, 他的特征是与委托类有相同的接口,但是并不具体实现真正的服务 作用: 消息预处理 过滤消息 把消息转发给委托类 消息的事后处理 代理的分类: 静态代理:把已存在的编译文件重新编译 动态代理:在程序运行的时候通过反射机制动态创建 JAVA的动态代理主要是: JDK自带的proxy cglib (code generation library) 什么是ASM? 一个字节码操控框架,可以增强既有类的功能、生成新的类。 JAVA class被描述成一棵树, asm使用 visitor模式 来遍历整个二进制结构 JDK-InvocationHandler 委托类必须实现接口,不能代理普通类(没有接口的类) 代理类必须实现InvocationHandler的接口,例子如下: public Object invoke ( Object proxy , Method method , Object [ ] args ) throws Throwable { //do something before //execute, target is the real implemation class(Delegate) result = method . invoke ( target , args ) ; //do something after

SpringMVC源码阅读RequestMappingHandlerAdapter如何处理Handle(八)

十年热恋 提交于 2020-01-21 18:31:31
接口 public interface HandlerAdapter { /** * 是否能处理指定Handler * @param var1 * @return */ boolean supports(Object var1); /** * 处理Handler * @param var1 * @param var2 * @param var3 * @return * @throws Exception */ @Nullable ModelAndView handle(HttpServletRequest var1, HttpServletResponse var2, Object var3) throws Exception; /** * 获取资源最后一次更新时间 * @param var1 * @param var2 * @return */ long getLastModified(HttpServletRequest var1, Object var2); } 类图 我们回到Dispatcher开始看起 DispatcherServlet doDispatch org.springframework.web.servlet.FrameworkServlet#service -> org.springframework.web.servlet.FrameworkServlet

《设计模式之美》理论二:如何做到“对扩展开放、修改关闭”?扩展和修改各指什么?

别等时光非礼了梦想. 提交于 2020-01-21 17:15:11
王争《设计模式之美》 学习笔记 如何理解“对扩展开放、修改关闭”? 开闭原则 开闭原则:SOLID 中的第二个原则,英文全称是 Open Closed Principle,简写为OCP。 开闭原则是 SOLID 中最难理解、最难掌握,同时也是最有用的一条原则。 对扩展开放、修改关闭,直接影响代码的扩展性,扩展性是代码质量最重要的衡量标准之一。 项目实战 API 接口监控告警的代码 Alert类: 属性两个:AlertRule 存储告警规则,Notification 是告警通知类 方法:check()主要业务逻辑两种报警场景 此时要添加一种报警场景,修改: check()增加一个参数 在check()方法内部增加新报警场景的逻辑代码 修改单元测试 用扩展的方案,要先重构Alert类: 将check()方法的多参数,封装成ApiStatInfo 类 引入handler概念,将多种报警场景放在各handler中 此时要添加一种报警场景,扩展: 在ApiStatInfo 类中新增属性 添加一个新的报警场景的handler类 重构后的代码十分灵活,添加新的报警场景,完全不需要修改check()的逻辑,只需要添加对应的handler即可。老的单元测试也不用修改,只需要添加新的单元测试。 作者得例子都非常有实用场景,之前做过这样的报警,但是没把handler封装成类,而是封装的方法。