Python基础
文章平均质量分 92
易辰_
当你的能力撑不起你的野心的时候,你就静下心来努力学习
展开
-
python基础-Manager进程数据共享、进程互斥锁数据非共享、线程互斥锁数据共享
线程锁数据共享我们把上篇博客线程锁代码拿过来from threading import Thread,Lockimport timen=100def task(): global n mutex.acquire() temp=n time.sleep(0.1) n=temp-1 mutex.release()if __name__ == '__ma原创 2017-12-04 21:00:31 · 1625 阅读 · 0 评论 -
python基础-迭代器、for底层机制、生成器、list结合yield、__call__、yield函数列表
迭代器概念可迭代的必须含有一个iter方法(可迭代协议) 迭代器比可迭代对象多一个next方法 包含next方法的可迭代对象就是迭代器 迭代器:包含next,iter方法的就是迭代器(迭代器协议) 迭代器是可迭代的一部分#爬虫作业#获取列表的方法print(dir(["safly"]))#拿到迭代器print("abc".__iter__())#依次取值ite =原创 2017-11-03 13:29:10 · 775 阅读 · 0 评论 -
python基础-生成器进阶(send、from)、各种推导式、生成器表达式
yield回顾def cloth(): for i in range(10): yield '衣服%s'%ig = cloth()for i in g: print(i)g = cloth()for i in range(10): print(g.__next__())g = cloth()lst = list(g)for i原创 2017-11-06 20:58:51 · 1474 阅读 · 0 评论 -
python基础-yield与装饰器、yield并发切换(非io)、greenlet实现切换(非io)
yield结合装饰器无返回值yield结合装饰器有返回值yield实现并发效果yield不能实现io切换greenlet任务切换yield结合装饰器(无返回值)def deco(func): def wrapper(): yie = func() print(type(yie)) ret = next(yie) ret原创 2017-12-07 13:38:56 · 1376 阅读 · 0 评论 -
python基础-信号量Semaphore(进程_线程)、事件Event(进程_线程)
信号量进程信号量线程信号量事件线程事件进程事件信号量进程信号量互斥锁 同时只允许一个线程更改数据,而Semaphore是同时允许一定数量的线程更改数据 ,比如厕所有3个坑,那最多只允许3个人上厕所,后面的人只能等里面有人出来了才能再进去,如果指定信号量为3,那么来一个人获得一把锁,计数加1,当计数等于3时,后面的人均需要等待。一旦释放,就有人可以获得一把锁信号量与进程池的概念很像,但是要区原创 2017-12-06 22:38:00 · 5067 阅读 · 1 评论 -
python基础-管道通信(进程)、线程Condition使用
管道管道的概念管道通信示例进程线程之定时器延迟执行立即执行阻塞线程Condition管道管道的概念#创建管道的类:Pipe([duplex]):在进程之间创建一条管道,并返回元组(conn1,conn2),其中conn1,conn2表示管道两端的连接对象,强调一点:必须在产生Process对象之前产生管道#主要方法: conn1.recv():接收conn2.send(obj原创 2017-12-07 17:57:25 · 1531 阅读 · 0 评论 -
python基础-namedtuple、queue队列、deque双向队列
namedtuple模块1.namedtuple: 生成可以使用名字来访问元素内容的tuplefrom collections import namedtuplePoint = namedtuple("P",["x","y"])print("-----3种定义方式--------")#定义方式1p1 = Point(1,2)#定义方式2p2 = Point(x=1,y = 2)#定义方原创 2017-11-14 17:31:39 · 994 阅读 · 0 评论 -
python基础-tcp粘包、解决方案、subprocess执行shell命令
subprocess引入socket粘包问题粘包现象客户端粘包服务端粘包粘包解决方案1structpack粘包解决方案2subprocess平时我们在dos命令窗口中 那么我们在python中也有一个方法subprocess实现同样的效果import subprocessobj=subprocess.Popen('dir',she原创 2017-11-28 17:47:52 · 829 阅读 · 0 评论 -
python基础-paramiko模块(未完待续)
SSHClient基于用户名密码连接基于公钥密钥连接SFTPClien基于用户名密码上传下载基于公钥密钥上传下载下载安装 pip install paramiko #在python3中 SSHClient基于用户名密码连接:import paramiko# 创建SSH对象ssh = paramiko.SSHClient()# 允许连接不在know_hosts文件中的主机ssh原创 2017-12-06 22:19:55 · 441 阅读 · 0 评论 -
python基础-死锁、递归锁
死锁递归锁死锁所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程from threading import Thread,Lockimport timemutexA=Lock()mutexB=Lock()class MyThread(T原创 2017-12-05 19:50:35 · 5500 阅读 · 6 评论 -
python基础-进线程下的queue、及其生产者消费者模型(2种方式)
进程下的Queue进程下的生成者消费者模型进程下的Queue进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的创建队列的类(底层就是以管道和锁定的方式实现): 1 maxsize是队列中允许最大项数,省略则无大小限制。 2 q.put方法用以插入数据到队列中,put方法还有两个可选参数:blocked原创 2017-12-04 22:12:39 · 1372 阅读 · 0 评论 -
python基础-进程池、submit同异步调用、shutdown参数、ProcessPoolExecutor进程池、进程池ftp
引入进程池使用ProcessPoolExecutor进程池使用shutdown使用submit同步调用使用submit异步调用引入进程池在学习线程池之前,我们先看一个例子from multiprocessing import Processimport timedef task(name): print("name",name) time.sleep(1)if __n原创 2017-11-30 20:21:59 · 23441 阅读 · 2 评论 -
python基础-线程创建、线程池、进\线程异步回调(add_done_callback)、进\线程数据共享、ftp线程池
线程创建线程进程pid线程进程数据共享线程池线程的一些其他方法异步-回调函数ProcessPoolExecutor方式ThreadPoolExecutor方式线程创建进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才是cpu上的执行单位。 每个进程有一个地址空间,而且默认就有一个控制线程 线程就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间原创 2017-12-01 17:04:47 · 12176 阅读 · 2 评论 -
python基础-GIL全局解释器锁
GIL介绍GIL与LockGIL与多线程线程进程适用范围GIL介绍”’ 定义: In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lock is ne原创 2017-12-05 17:48:46 · 487 阅读 · 0 评论 -
python基础-网络协议
物理层数据链路层以太网协议mac地址广播网络层ip数据包ARP协议传输层应用层物理层 物理层功能:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0数据链路层数据链路层由来:单纯的电信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思 数据链路层的功能:定义了电信号的分组方式以太网协议:以太网协议ethernet规定一组电信号构成一个数据包,原创 2017-11-27 15:45:44 · 1037 阅读 · 0 评论 -
python基础-协程gevent用法、协程同步异步、协程socket并发例子
协程引入协程概念gevent用法同步异步协程下的socket并发协程引入本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制),一种情况是该任务发生了阻塞,另外一种情况是该任务计算的时间过长协程的本质就是在单线程下,由用原创 2017-12-05 21:14:35 · 5202 阅读 · 0 评论 -
python基础-io模型、阻塞、非阻塞、io多路复用
io介绍阻塞IOblocking IO非阻塞IOnon-blocking IO多路复用IOIO multiplexingio介绍为了更好地了解IO模型,我们需要事先回顾下:同步、异步、阻塞、非阻塞同步与异步针对的是函数/任务的调用方式:同步就是当一个进程发起一个函数(任务)调用的时候,一直等到函数(任务)完成,而进程继续处于激活状态。而异步情况下是当一个进程发起一个函数(任务)调用的时候,不原创 2017-12-06 20:58:36 · 1935 阅读 · 0 评论 -
python基础-socketserver(tcp\udp)、selectors模块
基于tcp的socketserver基于tcp的套接字,关键就是两个循环,一个链接循环,一个通信循环socketserver模块中分两大类:server类(解决链接问题)和request类(解决通信问题)基于tcp的socketserver我们自己定义的类中的 self.server即套接字对象 self.request即一个链接 self.client_address即客户端地址服务端原创 2017-12-06 21:14:50 · 1287 阅读 · 0 评论 -
python基础-abstractmethod、__属性、property、setter、deleter、classmethod、staticmethod
python中的接口概念利用NotImplementedError利用abstractmethod抽象类多态概念__属性封装私有静态属性私有方法私有对象属性私有属性不能被继承property 方法转属性property-setter设置值deleter内置property函数classmethodstaticmethod总结类对象可以调用的方法原创 2017-11-22 17:15:24 · 7003 阅读 · 0 评论 -
python基础-BytesIO,StringIO
StringIO常用方法示例代码strIO截取利用缓存写入文件BytesIO通过缓存存入文件通过缓存读取文件文件句柄赋值BytesIO想要了解文件读取操作的,可以参考文件读取 文件读取 文件读取StringIO常用方法1、read s.read([n]):参数n用于限定读取的长度,类型为int,默认为从当前位置读取对象s中所有的数原创 2018-02-07 12:02:17 · 8905 阅读 · 0 评论 -
python基础-元类
return class构建type()metaclass示例其他return class构建def createClass(): class Foo(): pass return FoomyClass = createClass()print(myClass,type(myClass))print(myCl...原创 2018-03-08 17:55:15 · 361 阅读 · 0 评论 -
python基础-单分派泛函数singledispatch
函数中使用对象中使用singledispatch是标准库functools模块的函数 可以把整体方案拆成多个模块,甚至可以为你无法修改的类提供专门的函数,使用@singledispatch装饰的函数会变成泛函数1、singledispatch:标记处理object类型的基函数 2、各个专门函数使用@<<base_function>>.r...原创 2018-03-31 19:37:49 · 7935 阅读 · 0 评论 -
python设计模式---享元模式
享元模式定义是它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元从享元模式定义来看,跟单例模式有相同之处, 单例模式(Singleton)的定义:是为了确保一个类只能产生一个实例,从而节省对象创建所花费的时间,...原创 2018-03-21 20:31:20 · 456 阅读 · 0 评论 -
python设计模式---策略者模式
策略者模式定义是定义一组算法,将每个算法都封装起来,并使他们之间可互换。 我简单的理解就是一个任务,可以用多种方法实现通过一个简单例子来理解吧,我要买车,可以分成如下的途径方法实现1、我借钱买车2、我自己花钱买车首先我们定义一个策略任务接口类,里面有一个strategy抽象的方法,这里写的不严谨,应该参数带上selffrom abc import ABCMeta,abstr...原创 2018-03-21 21:28:17 · 266 阅读 · 0 评论 -
python基础---排序
二分法查找前提:该列表(以列表为例)是有序的 思路:让被查询的元素,跟列表的起始索引的中间值做比较,去变更起始索引,直到起始索引相等即可二分查找取中央 判断索引在哪方 依据大小定方向 变更起始循环上 直到起始相碰撞def binary_search(li, val): low = 0 high = len(li) - 1 while low <...原创 2018-04-22 22:08:23 · 263 阅读 · 0 评论 -
python基础---functools
普通装饰器带参数装饰器functools初识partial普通装饰器def wapper(func): def inner(*args,**kwargs): return func(*args,**kwargs) return inner@wapperdef index(a1): return a1 + 10...原创 2018-04-24 17:02:40 · 187 阅读 · 0 评论 -
python基础--性能相关、自定义异步io
性能相关循环操作线程池多线程+回调函数执行多进程异步iosetblocking非阻塞setblocking非阻塞性能相关循环操作import requestsdef fetch_async(url): response = requests.get(url) return responseurl_list = ['h...原创 2018-05-10 20:58:10 · 831 阅读 · 0 评论 -
python基础--Mac下Elasticsearch的使用
环境配置index增加、get查询search删除环境配置环境依赖: Python:3.6.5 ES依赖包:elasticsearch ElasticSearch:5.6.9 操作系统:Mac通过pip install elasticsearch进行安装index增加、get查询from elasticsear...原创 2018-07-30 17:33:31 · 1107 阅读 · 0 评论 -
python基础--protobuf的使用(一)
protobuf2/3语法介绍protobuf2语法介绍protobuf3语法介绍安装linux安装Mac安装待续protobuf2/3语法介绍Protobuf(Google Protocol Buffers)是google开发的的一套用于数据存储,网络通信时用于协议编解码的工具库.它和XML和Json数据差不多,把数据已某种形式保存起来.Pro...原创 2018-07-31 21:36:03 · 87125 阅读 · 8 评论 -
python基础-LruCaChe
常规方法OrderedDictlru_cacheLRU是Least Recently Used 近期最少使用算法。是一种置换算法, 百度百科是这么介绍的:内存管理的一种页面置换算法,对于在内存中但又不用的数据块(内存块)叫做LRU,操作系统会根据哪些数据属于LRU而将其移出内存而腾出空间来加载另外的数据。LruCache算法在安卓开发里面用的很广泛在Andr...原创 2018-03-31 18:16:02 · 7453 阅读 · 0 评论 -
RabbitMQ
Windows下安装RabbitMQ概念基本示例消息持久化exchange发布订阅direct 有选择的接收消息模糊匹配topicWindows下安装RabbitMQ(1):下载erlang,原因在于RabbitMQ服务端代码是使用并发式语言erlang编写的,下载地址:http://www.erlang.org/downloads,双击.ex...原创 2018-03-31 14:47:06 · 309 阅读 · 0 评论 -
python设计模式---装饰器模式
装饰普通函数装饰函数不含语法糖装饰函数含语法糖装饰类方法装饰类方法不含语法糖装饰类方法含语法糖装饰类对象方法装饰类对象方法不含语法糖装饰类对象方法含语法糖装饰类装饰类不含语法糖装饰类含语法糖functools 方法类内置的装饰器如何想了解如何一步步构造通用的装饰器,可以查阅我如下的笔记 pytho...原创 2018-03-15 18:36:50 · 724 阅读 · 0 评论 -
python基础-attr系列
__getattr____getattribute____setattr__Local其他__getattr__实例instance通过instance.name访问属性name,只有当属性name没有在实例的__dict__或它构造类的dict或基类的dict中没有找到,才会调用__getattr__。当属性name可以通过正常机制追溯到时,getat...原创 2018-03-15 20:30:46 · 3472 阅读 · 0 评论 -
python设计模式---多种方法实现单例模式
__new__方式创建type构建单例metaclass元类方式(1)metaclass元类方式(2)模块构建单例这篇博客利用了元类,type的特性,需要了解其方法,这里就不去赘述了,请自行百度,或者看我如下博客 这里就不去介绍元类的用法了,如果感兴趣的可以去自行百度,或者看我下面的元类介绍文章python基础-元类 python基础-元类 __...原创 2018-03-09 17:45:07 · 295 阅读 · 0 评论 -
python基础-元类执行流程
第一步继承默认元类typeclass Mymeta(type): # 继承默认元类的一堆属性 def __init__(self, class_name, class_bases, class_dic): print("Mymeta__init__") super(Mymeta, self).__init__(class_name, class_...原创 2018-03-09 19:37:05 · 632 阅读 · 0 评论 -
python设计模式---工厂模式
在学习工厂模式之前,我们必须要了解何为所谓的工厂模式 这篇博客,我就利用一个例子来一步步对工厂模式,进行概述 提到工厂模式,我们要有两个事物,一是工厂,二是产品,具体工厂、产品是什么类型的? 这里是抽象的,不具体的,需要具体的工厂、产品来继承或实现其方法,才能称为具体工厂、具体产品接下来我定义1个抽象的工厂,它的实现类或子类是自行车厂、汽车厂 接下来我定义1个抽象的产品,它的实现类或子...原创 2018-03-16 17:31:13 · 653 阅读 · 0 评论 -
python设计模式---原型模式
在了解原型模式前,我们先复习下python基础知识–深浅拷贝我们先来看浅拷贝l1 = [1, 2, 3, ['barry', 'safly']]l2=l1.copy()#浅拷贝print(id(l1),id(l2))输出如下81298256 81298336我们定义了一个变量l1,然后通过浅拷贝l1.copy()赋值一个变量l2,此刻l1与l2的内存地址值是不同的,我...原创 2018-03-16 22:05:05 · 520 阅读 · 0 评论 -
python设计模式---代理模式
代理模式是为某对象提供一个代理,以控制对此对象的访问和控制 这里我利用经典的案例,来阐述何为代理模式 人通过汽车4S店购买车代理商:汽车4S店实体:人行为:买车我们时时刻刻在使用代理模式,比如如下的代码,我感觉就是一个代理模式class Foo(): a = 1类Foo中持有了一个a变量,只是我们没有对a进行处理操作人通过汽车4S店购买车,这个案例,我们...原创 2018-03-20 20:26:32 · 228 阅读 · 0 评论 -
python设计模式---适配器模式
适配器模式定义如下:将一个类的接口变换成客户端期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作我们先来看不利用适配器模式,如何调用其他类的方法的class A(): def a(self): raise NotImplementedErrorclass CompanyA(A): def a(self): ...原创 2018-03-20 21:42:26 · 374 阅读 · 0 评论 -
python设计模式---观察者模式
什么是观察者模式呢? 我是这样理解观察者模式的,当我去使用一个设计模式时候,我很喜欢将抽象的问题具体化 1、被观察者 2、被观察者的行为 3、观察者 4、观察者的行为 5、关联2者的类(简单的可以在被观察者里面去关联2者)首先先来了解一个最简单的观察者模式,我就拿一个最经典的例子来解释 我和小明(观察者)去订报(观察者行为),邮局(被观察者)有报纸(被观察者行为)就会通知我和小明...原创 2018-03-31 11:18:05 · 328 阅读 · 0 评论