handler

责任链模式(Chain of Responsibility)

自古美人都是妖i 提交于 2020-01-19 19:07:59
一、引言 初看责任链模式,心里不禁想起了一个以前听过的相声:看牙。有壹个牙科医生,第壹次给病人拔牙,非常紧张。他刚把臼齿拔下来,不料手壹抖,没有夹住,于是,牙齿掉进了病人的喉咙。“非常抱歉,”医生说,“你的病已不在我的职责范围之内,你应该去找喉科医生。”当这个病人找到喉科医生时,他的牙齿掉得更深了。喉科医生给病人做了检查。“非常抱歉,”医生说,“你的病已不在我的职责范围之内了,你应该去找胃病专家。”胃病专家用调光为病人检查后说:“非常抱歉,牙齿已掉到你的肠子里了,你应该去找肠病专家。”肠病专家同样做了调光检查后说:“非常抱歉,牙齿不在肠子里,它肯定掉到更深的地方了,你应该去找肛门科专家。”最后,病人趴在肛门科医生的检查台上,摆出壹个屁股朝天的姿势,医生用内窥镜检查了壹番,然后吃惊地叫道:“啊,天哪!你的这里长了颗牙齿,应该去找牙科医生。”。病人因此楼上楼下的跑了好多科室,最后无果而终。 责任链模式就是这种“推卸”责任的模式,你的问题在我这里能解决我就解决,不行就把你推给另一个对象。至于到底谁解决了这个问题了呢?我管呢! 二、定义与结构 从名字上大概也能猜出这个模式的大概模样——系统中将会存在多个有类似处理能力的对象。当一个请求触发后,请求将在这些对象组成的链条中传递,直到找到最合适的“责任”对象,并进行处理。 《设计模式》中给它的定义如下:使多个对象都有机会处理请求

Netty客户端代码+protobuf

隐身守侯 提交于 2020-01-19 17:35:52
package com.oztf.common.netty; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.handler.codec.protobuf.ProtobufDecoder; import io.netty.handler.codec.protobuf.ProtobufEncoder; import io.netty.handler.codec

想到啥写啥第一期:handler+message

我怕爱的太早我们不能终老 提交于 2020-01-19 16:47:39
想到啥写啥第一期:致力于更简单易懂的代码解决我们安卓小白遇到的问题 这次写点小东西,就是主线程里面的 Handler+Message ,直接上代码 我们先在最上面去定义一个handler,用于接收待会儿发出的消息 private Handler handler = new Handler ( ) { @Override public void handleMessage ( @NonNull Message msg ) { super . handleMessage ( msg ) ; switch ( msg . what ) { case 1 : Toast . makeText ( Image . this , "测试文本" , Toast . LENGTH_SHORT ) . show ( ) ; break ; default : break ; } } } ; 然后在oncreate()里面写一个发送message的Timer Timer timer = new Timer ( ) ; timer . schedule ( new TimerTask ( ) { @Override public void run ( ) { Message msg = new Message ( ) ; msg . what = 1 ; handler . sendMessage (

android 避免线程的重复创建(HandlerThread、线程池)

爱⌒轻易说出口 提交于 2020-01-19 14:39:44
最近在android开发中,用到都是new Thread(){...}.start()这种方式。本来这样是可以,但是最近突然爆出Performing stop of activity that is not resumed 错误,google了一下发现是线程多次创建的问题; 多次使用上面的方式,会创建多个匿名线程。使得程序运行起来越来越慢。 因此,可以考虑使用一个Handler来启动一个线程,当该线程不再使用就删除,保证线程不会重复创建。 一般会使用Handler handler = new Handler(){...}创建Handler。这样创建的handler是在主线程即UI线程下的Handler, 即这个Handler是与UI线程下的默认Looper绑定的。Looper是用于实现消息队列和消息循环机制的。 因此,如果是默认创建Handler那么如果线程是做一些耗时操作如网络获取数据等操作,这样创建Handler是不行的。 Android API提供了HandlerThread来创建线程。官网的解释是:Handy class for starting a new thread that has a looper. The looper can then be used to create handler classes. Note that start() must still

No handlers could be found for logger

杀马特。学长 韩版系。学妹 提交于 2020-01-19 03:08:25
问题 I am newbie to python. I was trying logging in python and I came across No handlers could be found for logger error while trying to print some warning through logger instance. Below is the code I tried import logging logger=logging.getLogger('logger') logger.warning('The system may break down') And I get this error No handlers could be found for logger "logger" What's confusing me is when I first try to print warning using logging and then through logger , it works fine, like >>> import

Springmvc架构

大兔子大兔子 提交于 2020-01-19 02:20:47
框架结构如下图: 架构流程: 1、用户发送请求至前端控制器DispatcherServlet 2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。 4、DispatcherServlet通过HandlerAdapter处理器适配器调用处理器 5、执行处理器(Controller,也叫后端控制器)。 6、Controller执行完成返回ModelAndView 7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet 8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器 9、ViewReslover解析后返回具体View 10、 DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。 11、DispatcherServlet响应用户 组件说明 以下组件通常使用框架提供实现: •DispatcherServlet:前端控制器 用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心

wsgiref 结构分析

烂漫一生 提交于 2020-01-18 19:54:23
1、首先给出wsgiref的结构   上图是wsgiref的所有模块及模块间的调用关系,如下对wsgiref的模块进行简要的说明:    ① simple_server 实现的是一个简单的 HTTP 服务器,并给出了一个简单的 demo,运行:       python simple_server.py    ② handlers       simple_server模块将HTTP服务器分成了Server 部分和Handler部分,前者负责接收请求,后者负责具体的处理, 其中Handler部分主要在handlers中实现。    ③ headers 这一模块主要是为HTTP协议中header部分建立数据结构。    ④ util 这一模块包含了一些工具函数,主要用于对环境变量,URL的处理。    ⑤ validate 这一模块提供了一个验证工具,可以用于验证你的实现是否符合WSGI标准。 simple_server模块的调用如下图所示:   由上图可以看出,simple_server 模块主要有两部分内容     应用程序 函数demo_app是应用程序部分     服务器程序 服务器程序主要分成Server 和 Handler两部分,另外还有一个函数 make_server 用来生成一个服务器实例 注:本文引自http://blog.csdn.net/on_1y

logging模块

百般思念 提交于 2020-01-18 19:25:54
logging模块 函数式简单配置 import logging logging.debug('debug message') logging.info('info message') logging.warning('warning message') logging.error('error message') logging.critical('critical message') 默认情况 下Python的logging模块将日志打印到了标准输出中,且 只显示了大于等于WARNING级别的日志 ,这说明默认的日志级别设置为WARNING(日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG),默认的日志格式为日志级别:Logger名称:用户输出消息。 灵活配置日志级别,日志格式,输出位置: import logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S', filename='/tmp/test.log', filemode='w') logging.debug(

求指点:IIS部署DJango项目,出现错误。

对着背影说爱祢 提交于 2020-01-18 13:37:19
部署好了,就是提示这个错误,个人觉得应该是路径没有用转义符,可是不知道是哪个文件里的路径有问题。。。求指点。 Error occurred while reading WSGI handler: Traceback (most recent call last): File “c:\python\lib\site-packages\wfastcgi.py”, line 791, in main env, handler = read_wsgi_handler(response.physical_path) File “c:\python\lib\site-packages\wfastcgi.py”, line 633, in read_wsgi_handler handler = get_wsgi_handler(os.getenv(“WSGI_HANDLER”)) File “c:\python\lib\site-packages\wfastcgi.py”, line 616, in get_wsgi_handler raise ValueError(’"%s" could not be imported%s’ % (handler_name, last_tb)) ValueError: “django.core.wsgi.get_wsgi_application()”

Stop handler.postDelayed()

不问归期 提交于 2020-01-18 13:22:23
问题 I call multiple Handlers by new Handler().postDelayed(new Runnable()..... How can I stop it when I click on back? public class MyActivity extends AppCompatActivity implements OnClickListener { private Button btn; private Handler handler; private Runnable myRunnable; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); btn = (Button) findViewById(R.id.trainingsstart); btn.setOnClickListener(this); } @Override public void onClick(View v) { Handler