Python全栈
无名小卒一枚
因为你们都太优秀了,这就是我持续努力的动力
展开
-
Python 协程
实现并发:开多进程和开多线程若只有一个线程,肯定无法实现并行,但是否可以实现并发?并发的实现手段:切换+保存状态,原来是由OS管控,没有I/O时操作系统也可能切换任务,因为要统筹全局。但是真正能提高效率的是有I/O的时候切换。在自己的线程中,有五个任务,进行切换+保存状态,也叫并发,但是是由程序员控制,OS管不着。即,单线程下实现并发,成为协程。协程不存在,只是人们规定的一...原创 2019-12-18 17:10:26 · 100 阅读 · 0 评论 -
Python 进程池与线程池
前边套接字通信服务端多任务并发,套接字通信是I/O密集型的任务,用多线程。主线程建连接,每建一个连接就起一个线程。 彼此任务不再影响。但这种方式会有服务端无限开线程的问题。所以要限制并发的个数,使用pool的概念。开线程池,池的大小设置:设为机器可以承受的范围。线程池是一种折中的方案,其实比不开池效率低,但保证了安全机器不会崩。线程池应用于问题规模大,要开许多线程,多到机器无法承受的...原创 2019-12-18 15:01:04 · 158 阅读 · 0 评论 -
Python 线程相关 线程queue
线程queuePython3中的所有模块名都变成了纯小写了。进程的队列不能给线程用线程间通信使用线程queue不通过其他机制线程间的通信,但是要考虑锁的问题,用了队列就不用考虑锁的问题了对于程序的不同组件,在现实中分布式的运行在多台机器效率更好,这些机器间为了仍然能够协调合作需要通信,就将通信队列组件也部署在一台机器上,让其他别的机器都连着这台机器就可以实现间接通信了。这样一来效率提高...原创 2019-12-17 19:53:01 · 128 阅读 · 0 评论 -
Python 线程相关 递归锁解决死锁、信号量、Event事件、条件
-RLock解决死锁死锁:from threading import Thread,Lockimport timemutexA=Lock()mutexB=Lock()class MyThread(Thread): def run(self): self.func1() self.func2() def func1(se...原创 2019-12-17 19:22:03 · 153 阅读 · 0 评论 -
Python 关于GIL
GIL是Cpython解释器中使用的一种机制当前运行的线程持有GIL,GIL保证解释器当前只有一个线程只要一进行I/O操作就释放掉GIL对于绑定CPU 并且从不进行I/O操作的线程当做特例对待实质是互斥锁,即将并行变成串行每次执行一个python脚本,就产生一个独立的进程,所有开的线程都运行在这一个进程内所有线程共享进程数据,所有线程的任务都需要将任务的代码当做参数传给解释器的代码去...原创 2019-12-16 16:55:03 · 94 阅读 · 0 评论 -
Python线程相关(二)多线程实现并发的套接字通信、守护线程
实现服务器端并发服务器端# -*- coding: utf-8 -*-"""Created on Sun Dec 15 15:27:19 2019@author: clt"""#服务器端 #为了实现并发的连接,用多线程更合适 #服务器有两个任务:1、建连接;2、收发消息import socketfrom threading import Thread,current_...原创 2019-12-15 17:26:09 · 200 阅读 · 0 评论 -
Python线程相关(一) 开启线程的两种方式、进程与线程的区别
线程理论详见https://www.cnblogs.com/linhaifeng/articles/7430082.html1、每个进程内都会有一个默认的线程2、多线程指得是一个进程里有多个线程3、线程的最大两个特点:开启线程开销小;同一个进程内的多个线程共享数据;开启线程的两种方式开线程的目的:并发执行任务没有子线程的概念,在一个进程中的多个线程地位是平等的法一:imp...原创 2019-12-15 15:20:45 · 128 阅读 · 0 评论 -
Python进程相关(三)生产者消费者模型
一种解决问题的方法生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。基于队列实现生产者消费者模型# -*- coding: utf-8 -*-"""Created on Sun Dec 15 10:09:54 ...原创 2019-12-15 14:28:14 · 107 阅读 · 0 评论 -
Python进程相关(二)互斥锁、进程队列
-互斥锁对于模拟多人查票抢票票数放在文件中db.txt{"count":1}程序from multiprocessing import Processimport jsonimport timeimport randomimport osdef search(): time.sleep(random.randint(1,3)) dic=json.load(open(...原创 2019-12-15 10:04:16 · 164 阅读 · 0 评论 -
Python进程相关(一)
跟的视频,写这个博客就是为了督促自己,不写不看的话很快就忘记了吧。我就是想打好基础,慢慢来。子进程会完全拷贝父进程的地址空间作为自己的初始状态开进程的两种方式法一:常用#multiprocess类 #创建进程 #进程同步部分 #进程池部分 #进程之间数据共享 #线程与进程之间的接口是一样的#Process类创建进程的两种方式 #方式一...原创 2019-12-14 21:53:32 · 147 阅读 · 0 评论 -
Python-什么是异常处理以及异常处理的两种方式
错误语法错误逻辑错误异常,即程序运行时发生错误的信号异常的追踪信息traceback异常的类型NameError异常值Python中的异常种类在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,一个异常标识一种错误AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性xIOError ...转载 2019-12-02 15:27:37 · 511 阅读 · 0 评论 -
Python-查询功能与修改功能
查找文件中的某一行,并且输出余下行内容:#查询功能 #遍历一个文件,找某一段内容 def search(data): print('进入了查询功能') print('用户输入的数据是' ,data) with open('clt.txt','r') as read_f: tag=False for read_line in r...原创 2019-11-28 20:31:02 · 543 阅读 · 0 评论 -
Python-装饰器
什么是装饰器?本质就是个函数,功能为其他函数添加附加功能装饰器两个原则,不能动原来的函数1)不修改被修饰函数的源代码2)不修改被修饰函数的调用方式知识储备装饰器=高阶函数+函数嵌套+闭包高阶函数满足下列条件之一便可称为是高阶函数:1)函数接受的参数是一个函数名;2)函数的返回值是一个函数名...原创 2019-11-27 20:23:06 · 86 阅读 · 0 评论 -
Python-解压序列
#解压序列l=[1,2,3,52,65,32,13,24,34,46,46]#取出第一个最后一个值#用解压的方式a,*b,c=lprint(a)print(b)print(c)结果:1[2, 3, 52, 65, 32, 13, 24, 34, 46]46a,b,c='clt'print(a)print(b)print(c)结果:clt交换a,b的值f...原创 2019-11-27 17:26:33 · 112 阅读 · 0 评论 -
Python-生产者与消费者模型
使用生成器,实现单线程并发触发迭代器运行方法一:调用一次 _next_函数触发迭代器运行方法二:-用系统带的next()函数触发迭代器运行方法三:send法:与next效果一样def test(): print('开始啦') firs=yield 1 #yield可以赋值 print('第一次',firs) yield 2 pri...原创 2019-11-26 19:48:11 · 124 阅读 · 0 评论 -
Python-迭代器与生成器
迭代器什么是迭代?每次循环都是依赖上一个对象而来的什么是迭代器协议?一种约定,对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个stopieteration的异常,以终止迭代,只能向前走,不能往前。eg:for循环是遵循迭代器协议去访问对象什么是可迭代对象?实现了迭代器协议的对象,通过内部定义一个_iter_方法,可迭代对象必须提供一个next方...原创 2019-11-26 18:21:31 · 106 阅读 · 0 评论 -
Python-匿名函数,函数式编程,map函数,filter函数,reduce函数
匿名函数func=lambda x:x+1 #这里x是形参,x+1是返回值print(func(10))#匿名函数修改名字的操作name='alex'func1=lambda name:name+'_ll'newname=func1(name)print(newname)#匿名函数不该有名字,上边给名字只是便于理解#匿名函数通常是结合其他函数一起使用#python返...原创 2019-11-23 19:28:10 · 87 阅读 · 0 评论