并发编程
文章平均质量分 85
Henry_Lv
这个作者很懒,什么都没留下…
展开
-
基于Selectors的简单FTP
服务端import osimport selectorsimport socketclass Select_server(): Base_dir=os.path.dirname(os.path.abspath(__file__)) def __init__(self): self.dic={} self.hasreceived=0 ...原创 2018-04-30 15:06:19 · 205 阅读 · 0 评论 -
IO
参考:点击打开链接对于一个network IO (这里我们以read举例),它会涉及到两个系统对象,一个是调用这个IO的process (or thread),另一个就是系统内核(kernel)。当一个read操作发生时,该操作会经历两个阶段:1)等待数据准备 (Waiting for the data to be ready)2)将数据从内核拷贝到进程中(Copying the data fr...原创 2018-04-25 16:57:29 · 327 阅读 · 0 评论 -
协程
协程:是单线程下的并发,又称微线程,纤程。英文名Coroutine。一句话说明什么是线程:协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的。协程的本质就是在单线程下,由用户自己控制一个任务遇到io阻塞了就切换另外一个任务去执行,以此来提升效率。(多线程与多进程是抢占式的,协程是协作式的)需要强调的是:1. python的线程属于内核级别的,即由操作系统控制调度(如单线程遇到io或执行...原创 2018-04-24 18:29:45 · 217 阅读 · 0 评论 -
多线程
多线程Threading多线程之间的资源是共享的,多线程之间是并发的多线程的实现import threadingimport timedef music(name): print('%s begin to listen to music %s'%(name,time.ctime())) time.sleep(3) print('%s end to listen to ...原创 2018-04-19 15:50:00 · 232 阅读 · 0 评论 -
锁
Python的GIL:全局解释锁(Global Interpreter Lock)在执行多线程时,同一时刻至多只有一个线程被CPU执行,如果要实现并行可以使用多进程。Python适用于IO密集型情况,不太适用于计算密集型的场景,因为执行计算时线程间的切换会耗费时间。下面有三种情况import threadingimport timedef sub(): global num t...原创 2018-04-19 19:56:05 · 209 阅读 · 0 评论 -
同步对象与信号量
同步对象Eventimport threadingimport timeclass Boss(threading.Thread): def run(self): print('Boss:加班到<22:00>') print(event.isSet())#isSet判断event是否已经set event.set() ...原创 2018-04-20 20:30:34 · 178 阅读 · 0 评论 -
队列
队列queueq.put方法用以插入数据到队列中,put方法还有两个可选参数:blocked和timeout。如果blocked为True(默认值),并且timeout为正值,该方法会阻塞timeout指定的时间,直到该队列有剩余的空间。如果超时,会抛出Queue.Full异常。如果blocked为False,但该Queue已满,会立即抛出Queue.Full异常。q.get方法可以从队列读取并且...原创 2018-04-20 20:57:30 · 240 阅读 · 0 评论 -
生产消费者模型
import threading,time,random,queueq=queue.Queue()def Producer(name): count=0 while count<10: print('%s is making bread...'%name) time.sleep(random.randrange(3)) pr...原创 2018-04-20 21:48:56 · 177 阅读 · 0 评论 -
多进程
与线程不同,进程没有任何共享状态,进程修改的数据,改动仅限于该进程内,多进程间的资源是相互独立的,多进程是并行的多进程的实现与多线程类似注意:在windows中Process()必须放到# if __name__ == '__main__':下import multiprocessing,timedef run(): time.sleep(1) print('hello',ti...原创 2018-04-20 22:17:59 · 191 阅读 · 0 评论 -
进程间的数据通信与数据共享
进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的进程通信队列import multiprocessingdef run(q): q.put('hello') q.put('mainprocess') print('subprocess q ID:',id(q))if __nam...原创 2018-04-23 14:37:26 · 540 阅读 · 0 评论 -
进程池
在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间。多进程是实现并发的手段之一,需要注意的问题是:1.很明显需要并发执行的任务通常要远大于核数2.一个操作系统不可能无限开启进程,通常有几个核就开几个进程3.进程开启过多,效率反而会下降(开启进程是需要占用系统资源的,而且开启多余核数目的进程也无法做到并行)例如当被操作对象数目不大时,可...原创 2018-04-24 12:33:27 · 172 阅读 · 0 评论 -
Select与Selectors
多路复用IO的select使用select基础使用方法########################################客户端from socket import *client=socket(AF_INET,SOCK_STREAM)client.connect(('10.11.190.147',8080))while True: msg=input('>&...原创 2018-04-27 17:16:30 · 765 阅读 · 0 评论