非阻塞IO(non-blockingIO)Linux下,可以通过设置socket使其变为non-blocking。当对一个non-blockingsocket执行读操作时,流程是这个样子:从图中可以看出,当用户进程发出read操作时,如果kernel中的数据还没有准备好,那么它并不会block用户进程,而是立刻返回一个error。从用户进程角度讲,它发起一个read操作后,并不需要等待,而是马上就得到了一个结果。用户进程判断结果是一个error时,它就知道
系统 2019-09-27 17:53:07 2068
最近在做游戏服务分层的时候,一直想把mysql的访问独立成一个单独的服务DBGate,原因如下:请求收拢到DBGate,可以使DBGate变为无状态的,方便横向扩展当请求量或者存储量变大时,mysql需要做分库分表,DBGate可以内部直接处理,外界无感知通过restful限制对数据请求的形式,仅支持简单的get/post/patch/put进行增删改查,并不支持复杂查询。这个也是和游戏业务的特性有关,如果网站等需要复杂查询的业务,对此并不适合DBGate
系统 2019-09-27 17:52:45 2068
一、问题引出浅拷贝首先看下面代码的执行情况:a=[1,2,3]print('a=%s'%a)#a=[1,2,3]b=aprint('b=%s'%b)#b=[1,2,3]a.append(4)#对a进行修改print('a=%s'%a)#a=[1,2,3,4]print('b=%s'%b)#b=[1,2,3,4]b.append(5)#对b进行修改print('a=%s'%a)#a=[1,2,3,4,5]print('b=%s'%b)#b=[1,2,3,4,
系统 2019-09-27 17:52:42 2068
建造者模式,也是一种创建新对象的设计方法,和C++中的虚函数很类似,但是用到了python自身的虚基类ABCMeta。1.应用场景:某个类中的函数较多,且实现比较复杂,很多时候需要继承的子类重载或者重新定义逻辑;2.背景基础:由于用到python中虚函数,需要了解abc模块中的ABCMeta和python中类创建对象时的__metaclass__属性含义。一般地,在某个类中如果定义__metaclass__=something时,简单地说是,创建对象时,会
系统 2019-09-27 17:52:26 2068
扫描服务器ip开放端口,用线程池ThreadPoolExecutor,i7的cpu可以开到600个左右现成,大概20s左右扫描完65535个端口,根据电脑配置适当降低线程数#!/usr/local/python3.6.3/bin/python3.6#coding=utf-8importsocketimportdatetimeimportrefromconcurrent.futuresimportThreadPoolExecutor,waitDEBUG=Fa
系统 2019-09-27 17:52:19 2068
三引号完全原样输出print(r"""xx\n\adaadf=?aa“”")重复输出print(3*“ab”)print(“ab”*3)abababababab3、列表定义x=“world”y=[1,2,3,4,5]索引(负数从右边开始,正数从左边开始)print(x[0])print(y[4])print(x[-2])print(y[-1])print(y[-5])print(x[-5])w5l51w切片x=“world”y=[1,2,3,4,5]pri
系统 2019-09-27 17:51:22 2068
漫谈如果作为一个Python入门,不了解Python装饰器也没什么,但是如果作为一个中级Python开发人员,如果再不对python装饰器熟稔于心的话,那么可能并没有量变积累到质变。我以前也看过很多讲python装饰器的文章,但是都是看了就忘。一方面是没有做太多的练习,二是对它的领会不是很深。希望引以为戒!!!郑传装饰模式如果你了解Java,你肯定听过装饰器模式。在面向对象中,装饰模式指:动态地给一个对象添加一些额外的职责。就增加一些功能来说,装饰模式比生
系统 2019-09-27 17:51:05 2068
记住以下几点:直接子类化内置类型(如dict,list或str)容易出错,因为内置类型的方法通常会忽略用户覆盖的方法,不要子类化内置类型,用户自定义的类应该继承collections模块。def__setitem__(self,key,value):super().__setitem__(key,[value]*2)#错误案例classAnswerDict(dict):def__getitem__(self,item):#错误案例return42impor
系统 2019-09-27 17:50:43 2068
Python中定义函数有两种方法,一种是用常规方式def定义,函数要指定名字,第二种是用lambda定义,不需要指定名字,称为Lambda函数。Lambda函数又称匿名函数,匿名函数就是没有名字的函数,函数没有名字也行?当然可以啦。有些函数如果只是临时一用,而且它的业务逻辑也很简单时,就没必要非给它取个名字不可。好比电影里面的群众演员,往往他们的戏份很少,最多是衬托主演,跑跑龙套,他们需要名字吗?不需要,因为他们仅仅只是临时出镜,下次可能就用不着了,所以犯
系统 2019-09-27 17:50:41 2068
1.os.popen运行shell列表命令复制代码代码如下:deftraverseDirByShell(path):forfinos.popen('ls'+path):printf.strip()2.利用glob模块glob.glob(path)返回带目录的文件名.通配符和shell相似.path不能包含shell变量.复制代码代码如下:deftraverseDirByGlob(path):path=os.path.expanduser(path)forf
系统 2019-09-27 17:49:59 2068