摘要: 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 阅读(125) 评论(0) 推荐(0) 编辑
摘要: q=queue.Queue() #线程队列 q=multiprocessing.Queue() #进程队列 1)进程通信第一种方式:进程队列 2)进程通信第二种方式:(双向)管道Pipe 3)进程通信第三种方式:Managers (实现进程间数据共享,此区别与进程队列和进程管道(数据复制)) 阅读全文
posted @ 2018-06-14 19:52 benchdog 阅读(551) 评论(0) 推荐(0) 编辑
摘要: 由于GIL的存在,python中的多线程其实并不是真正的多线程,如果想要充分使用多核CPU的资源,在python中大部分情况使用多进程。 阅读全文
posted @ 2018-06-14 18:42 benchdog 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 生产者消费者是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者不直接通讯,而通过阻塞队列进行通信。阻塞队列就相当一个缓冲区,平衡了生产者和消费者的处理能力。 阅读全文
posted @ 2018-06-14 02:01 benchdog 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 队列是一种数据结构,是数据安全的,数据安全的。队列能干的事情列表都能干。列表是线程不安全的,所以可以说队列是针对多线程出现的。 数据结构是用来存储数据用的,只不过各种数据结构的存储方式不同。比如:集合、队列、映射 列表:按索引值存储 字典:按key值的哈希表存储 list.pop() #按索引删除 阅读全文
posted @ 2018-06-14 01:23 benchdog 阅读(155) 评论(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 阅读(398) 评论(0) 推荐(0) 编辑
摘要: 同步:接打电话 异步:收发短信 同步锁:threading.lock() 递归锁:threading.Llock() #计数器机制,只要计数器counter>0,其他线程无法竞争到CPU资源 同步条件(event) #event=threading.Event() event.wait() #等待f 阅读全文
posted @ 2018-06-14 00:15 benchdog 阅读(263) 评论(0) 推荐(0) 编辑