随笔分类 -  Python

python基础
摘要:执行结果:只要启动服务器端,然后不同的客户端多次启动都能收到信息,多个端口成功被监听 2. 下面使用select模块实现多路复用,使同一个端口同时接收多个链接 启动这个服务端之后,就可以实现多路复用了,可以接收多个客户端同时连接 3.下面介绍一些多路操作里面的读写分离 这样可以形成简单的读写分离操作 阅读全文
posted @ 2018-07-22 14:47 benchdog 阅读(309) 评论(0) 推荐(0)
摘要:我们通常使用 __init__ 来初始化时,会为其添加数据属性,例如 self.name = xxx ,但是却几乎不会为实例添加方法,也就是说实例中的方法,都是在类中找的。这样做其实有好处,因为方法一般是通用的,如果每一个实例都要保存一套方法的话,实在太浪费资源,而把这些方法统一保存到类中,用到的时 阅读全文
posted @ 2018-07-11 16:06 benchdog 阅读(189) 评论(0) 推荐(0)
摘要:类属性和对象属性在使用上的区别: 会发现student1引用的money属性的内存地址已经和另外两个的不一样了而另外两个的内存地址却还是一样的,原因如下:在经过表达式student1.money -= 1000 的过程如下:第一次引用money属性时,经历的过程如下:会先在对象中查找是否有money 阅读全文
posted @ 2018-07-11 15:54 benchdog 阅读(11017) 评论(0) 推荐(4)
摘要:#-*- coding:utf-8 -*- # # from bs4 import BeautifulSoup # # import requests,time # import random # import os # # with open('doc.html') as rf: # # soup = BeautifulSoup(rf,'html.parser') # # pr... 阅读全文
posted @ 2018-07-11 15:41 benchdog 阅读(1516) 评论(0) 推荐(0)
摘要:@property的作用是:直接运行被装饰的函数,不能带参数,表面上看就是在被装饰的函数后面直接加括号。 阅读全文
posted @ 2018-07-11 15:36 benchdog 阅读(670) 评论(0) 推荐(0)
摘要:classmethod 和 staticmethod 非常相似,但在用法上依然有一些明显的区别。classmethod 必须有一个指向 类对象 的引用作为第一个参数,而 staticmethod 可以没有任何参数。 staticmethod 没有任何必选参数,而 classmethod 第一个参数永 阅读全文
posted @ 2018-07-11 15:16 benchdog 阅读(160) 评论(0) 推荐(0)
摘要:server端: client端: 阅读全文
posted @ 2018-06-16 16:59 benchdog 阅读(168) 评论(0) 推荐(0)
摘要:目前学到的IO模型: 1)阻塞IO:从开始到结束全程阻塞。 2)非阻塞IO:接收数据时会阻塞 3)多路复用IO:select、poll、epoll 4)异步IO:全程无阻塞 5)信号驱动IO 1)、2)、3)属同步,4)属异步 阅读全文
posted @ 2018-06-16 11:33 benchdog 阅读(131) 评论(0) 推荐(0)
摘要:触发机制:1)水平触发;2)边缘触发 IO多路复用单线程实现并发,实现模块:1)select(效率最低); 2)poll;3)epoll(最好,nginx的实现)。linux下有这3种模块,windows下只有select模块 IO多路复用的好处:同时可以监听多个连接 IO多路复用的select模块 阅读全文
posted @ 2018-06-16 01:29 benchdog 阅读(139) 评论(0) 推荐(0)
摘要:client端: server端: 阅读全文
posted @ 2018-06-16 00:42 benchdog 阅读(580) 评论(0) 推荐(0)
摘要:GIL锁的存在,使python实现不了通过多核来完成多线程并行,如果想让python利用多核,只能通过开多进程来实现。所以python适合执行计算密集型任务。 资源抢占式:线程、进程 协程:协作式 >即非抢占式程序,关键词:yield生成器,主要解决的也是IO操作,但不能利用多核(没有多进程的情况下 阅读全文
posted @ 2018-06-15 23:09 benchdog 阅读(665) 评论(0) 推荐(0)
摘要:from multiprocessing import Process,Pool import time,os def Foo(i): time.sleep(1) print(i) print("son",os.getpid()) return "HELLO %s"%i def Bar(arg): print(arg) # print(... 阅读全文
posted @ 2018-06-14 22:38 benchdog 阅读(135) 评论(0) 推荐(0)
摘要:q=queue.Queue() #线程队列 q=multiprocessing.Queue() #进程队列 1)进程通信第一种方式:进程队列 2)进程通信第二种方式:(双向)管道Pipe 3)进程通信第三种方式:Managers (实现进程间数据共享,此区别与进程队列和进程管道(数据复制)) 阅读全文
posted @ 2018-06-14 19:52 benchdog 阅读(560) 评论(0) 推荐(0)
摘要:由于GIL的存在,python中的多线程其实并不是真正的多线程,如果想要充分使用多核CPU的资源,在python中大部分情况使用多进程。 阅读全文
posted @ 2018-06-14 18:42 benchdog 阅读(148) 评论(0) 推荐(0)
摘要:生产者消费者是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者不直接通讯,而通过阻塞队列进行通信。阻塞队列就相当一个缓冲区,平衡了生产者和消费者的处理能力。 阅读全文
posted @ 2018-06-14 02:01 benchdog 阅读(135) 评论(0) 推荐(0)
摘要:队列是一种数据结构,是数据安全的,数据安全的。队列能干的事情列表都能干。列表是线程不安全的,所以可以说队列是针对多线程出现的。 数据结构是用来存储数据用的,只不过各种数据结构的存储方式不同。比如:集合、队列、映射 列表:按索引值存储 字典:按key值的哈希表存储 list.pop() #按索引删除 阅读全文
posted @ 2018-06-14 01:23 benchdog 阅读(167) 评论(0) 推荐(0)
摘要:信号量是用来控制线程并发数的一内置计数器,每当调用acquire()时-1,调用release时+1,计数器不能小于0。 semaphore=threading.Semaphore(5) #设置信号量为5 4把锁用来做同步: 1)同步锁、互斥锁:lock() 2)递归锁:Rlock() 3)信号量: 阅读全文
posted @ 2018-06-14 00:33 benchdog 阅读(416) 评论(0) 推荐(0)
摘要:同步:接打电话 异步:收发短信 同步锁:threading.lock() 递归锁:threading.Llock() #计数器机制,只要计数器counter>0,其他线程无法竞争到CPU资源 同步条件(event) #event=threading.Event() event.wait() #等待f 阅读全文
posted @ 2018-06-14 00:15 benchdog 阅读(267) 评论(0) 推荐(0)
摘要:并发:系统具有处理多个任务(动作)的能力 并行:系统具有同时处理多个任务(动作)的能力 同步:当进程执行到一个IO(等待外部数据)的时候,需要等待,等待即同步 异步:当进程执行到一个IO(等待外部数据)的时候,不需要等待,待数据接收成功后,再回来处理。 GIL:全局解释锁:无论你有多少个线程,你有多 阅读全文
posted @ 2018-06-12 23:16 benchdog 阅读(1886) 评论(0) 推荐(0)
摘要:tcp有粘包,udp无粘包,将超出buffer_size数据丢弃。udp只负责发数据,不管服务端有没有开启(不依赖于服务端),一样运行不报错,所以不可靠。 tcp面向流,udp面向消息报文,每个udp段都是一条消息。应用程序必须以消息为单位提取数据,不能一次提取任意字节大小的数据。 udp不需建连接 阅读全文
posted @ 2018-06-07 22:06 benchdog 阅读(359) 评论(0) 推荐(0)