一、Queue是通过multiprocessing使用
  1. from multiprocessing import Process,Queue
  2. import time
  3. import random
  4. import os
  5. def consumer(q):
  6. while True:
  7. res=q.get()
  8. if res is None:
  9. break
  10. time.sleep(random.randint(1,3))
  11. print('\033[45m%s 吃了 %s\033[0m' % (os.getpid(), res))
  12. def producer(q):
  13. for i in range(5):
  14. time.sleep(2)
  15. res='包子%s' %i
  16. q.put(res)
  17. print('\033[44m%s 制造了 %s\033[0m' %(os.getpid(),res))
  18. q.put(None)
  19. if __name__ == '__main__':
  20. q=Queue()
  21. #生产者们:厨师们
  22. p1=Process(target=producer,args=(q,))
  23.  
  24. #消费者们:吃货们
  25. p2=Process(target=consumer,args=(q,))
  26.  
  27. p1.start()
  28. p2.start()
  29. p1.join()
  30. p2.join()
  31. print('主')

生产者,消费者模型1

  1. from multiprocessing import Process,Queue
  2. import time
  3. import random
  4. import os
  5. def consumer(q):
  6. while True:
  7. res=q.get()
  8. if res is None:break
  9. time.sleep(random.randint(1,3))
  10. print('\033[45m%s 吃了 %s\033[0m' % (os.getpid(), res))
  11. def product_baozi(q):
  12. for i in range(3):
  13. time.sleep(2)
  14. res='包子%s' %i
  15. q.put(res)
  16. print('\033[44m%s 制造了 %s\033[0m' %(os.getpid(),res))
  17. def product_jiaozi(q):
  18. for i in range(3):
  19. time.sleep(2)
  20. res='饺子%s' %i
  21. q.put(res)
  22. print('\033[44m%s 制造了 %s\033[0m' %(os.getpid(),res))
  23. def product_dabing(q):
  24. for i in range(3):
  25. time.sleep(2)
  26. res='大饼%s' %i
  27. q.put(res)
  28. print('\033[44m%s 制造了 %s\033[0m' %(os.getpid(),res))
  29. if __name__ == '__main__':
  30. q=Queue()
  31. #生产者们:厨师们
  32. p1=Process(target=product_baozi,args=(q,))
  33. p2=Process(target=product_jiaozi,args=(q,))
  34. p3=Process(target=product_dabing,args=(q,))
  35. #消费者们:吃货们
  36. p4=Process(target=consumer,args=(q,))
  37. p5=Process(target=consumer,args=(q,))
  38.  
  39. p_l=[p1,p2,p3,p4,p5]
  40. for p in p_l:
  41. p.start()
  42. # for p in p_l:
  43. # p.join()
  44. # p1.start()
  45. # p2.start()
  46. # p3.start()
  47. # p4.start()
  48. # p5.start()
  49. p1.join()
  50. p2.join()
  51. p3.join()
  52. q.put(None)
  53. q.put(None)
  54. p4.join()
  55. p5.join()
  56. print('主')

生产者,消费者模型2

  1. q .put方法用以插入数据到队列中,put方法还有两个可选参数:blockedtimeout。如果blockedTrue(默认值),
    并且timeout为正值,该方法会阻塞timeout指定的时间,直到该队列有剩余的空间。
    如果超时,会抛出Queue.Full异常。如果blockedFalse,但该Queue已满,会立即抛出Queue.Full异常。
  2. q.get方法可以从队列读取并且删除一个元素。同样,get方法有两个可选参数:blockedtimeout
    如果blockedTrue(默认值),并且timeout为正值,那么在等待时间内没有取到任何元素,会抛出Queue.Empty异常。
    如果blockedFalse,有两种情况存在,如果Queue有一个值可用,则立即返回该值,否则,如果队列为空,则立即抛出Queue.Empty异常.
  1. 1:可以往队列里放任意类型的数据 2 队列:先进先出
  1. from multiprocessing import Process,Queue
  2. q=Queue(3)
  3. q.put('first')
  4. q.put('second')
  5. q.put('third')
  6. # q.put('fourht')
  7.  
  8. print(q.get())
  9. print(q.get())
  10. print(q.get())
  11. # print(q.get())

q.put和q.get

  1.  
  1. from multiprocessing import Process,Queue
  2. q=Queue(3)
  3. q.put('first',block=False)
  4. q.put('second',block=False)
  5. q.put('third',block=False)
  6. # q.put('fourth',block=False)
  7. q.put('fourth',block=True,timeout=3)
  8.  
  9. q.get(block=False)
  10. q.get(block=True,timeout=3)
  11.  
  12. q.get_nowait() #q.get(block=False)

p.get的参数

二、JoinableQueue同样通过multiprocessing使用。 
     JoinableQueue的实例p除了与Queue对象相同的方法之外还具有:
   q.task_done():使用者使用此方法发出信号,表示q.get()的返回项目已经被处理。如果调用此方法的次数大于从队列中删除项目的数      量,将引发ValueError异常
 q.join():生产者调用此方法进行阻塞,直到队列中所有的项目均被处理。阻塞将持续到队列中的每个项目均调用q.task_done()方法为止
  1. from multiprocessing import Process,JoinableQueue
  2. import time
  3. import random
  4. import os
  5. def consumer(q):
  6. while True:
  7. res=q.get()
  8. time.sleep(random.randint(1,3))
  9. print('\033[45m%s 吃了 %s\033[0m' % (os.getpid(), res))
  10. q.task_done()
  11. def product_baozi(q):
  12. for i in range(5):
  13. time.sleep(2)
  14. res='包子%s' %i
  15. q.put(res)
  16. print('\033[44m%s 制造了 %s\033[0m' %(os.getpid(),res))
  17. q.join()
  18. if __name__ == '__main__':
  19. q=JoinableQueue()
  20. #生产者们:厨师们
  21. p1=Process(target=product_baozi,args=(q,))
  22. #消费者们:吃货们
  23. p4=Process(target=consumer,args=(q,))
  24. p4.daemon=True
  25. p1.start()
  26. p4.start()
  27. p1.join()
  28. print('主')

生产者,消费者模型3

  1. from multiprocessing import Process,JoinableQueue
  2. import time
  3. import random
  4. import os
  5. def product_baozi(q):
  6. for i in range(3):
  7. time.sleep(2)
  8. res='包子%s' %i
  9. q.put(res)
  10. print('\033[44m%s 制造了 %s\033[0m' %(os.getpid(),res))
  11. q.join()
  12. def product_jiaozi(q):
  13. for i in range(3):
  14. time.sleep(2)
  15. res='饺子%s' %i
  16. q.put(res)
  17. print('\033[44m%s 制造了 %s\033[0m' %(os.getpid(),res))
  18. q.join()
  19. def product_dabing(q):
  20. for i in range(3):
  21. time.sleep(2)
  22. res='大饼%s' %i
  23. q.put(res)
  24. print('\033[44m%s 制造了 %s\033[0m' %(os.getpid(),res))
  25. q.join()
  26. def consumer(q):
  27. while True:
  28. res = q.get()
  29. time.sleep(random.randint(1, 3))
  30. print('\033[45m%s 吃了 %s\033[0m' % (os.getpid(), res))
  31. q.task_done()
  32. if __name__ == '__main__':
  33. q=JoinableQueue()
  34. #生产者们:厨师们
  35. p1=Process(target=product_baozi,args=(q,))
  36. p2=Process(target=product_jiaozi,args=(q,))
  37. p3=Process(target=product_dabing,args=(q,))
  38. #消费者们:吃货们
  39. p4=Process(target=consumer,args=(q,))
  40. p5=Process(target=consumer,args=(q,))
  41. p4.daemon=True
  42. p5.daemon=True
  43. p_l=[p1,p2,p3,p4,p5]
  44. for p in p_l:
  45. p.start()
  46. p1.join()
  47. p2.join()
  48. p3.join()
  49. print('主')

生产者,消费者模型4

三,互斥锁

互斥锁应用:

  1. from multiprocessing import Process,Lock
  2. import os
  3. import time
  4. def work(mutex):
  5. mutex.acquire()
  6. print('task[%s] 上厕所' %os.getpid())
  7. time.sleep(3)
  8. print('task[%s] 上完厕所' %os.getpid())
  9. mutex.release()
  10. if __name__ == '__main__':
  11. mutex=Lock()
  12. p1=Process(target=work,args=(mutex,))
  13. p2=Process(target=work,args=(mutex,))
  14. p3=Process(target=work,args=(mutex,))
  15. p1.start()
  16. p2.start()
  17. p3.start()
  18. print('主')

互斥锁

四、模拟抢票:

  1. from multiprocessing import Process,Lock
  2. import json
  3. import time
  4. import random
  5. import os
  6. def search():
  7. dic=json.load(open('db.txt',))
  8. print('剩余票数%s' %dic['count'])
  9.  
  10. def get_ticket():
  11. dic=json.load(open('db.txt',))
  12. if dic['count'] > 0:
  13. dic['count']-=1
  14. json.dump(dic,open('db.txt','w'))
  15. print('%s 购票成功' %os.getpid())
  16. def task(mutex):
  17. search()
  18. time.sleep(random.randint(1, 3)) #模拟购票一系列繁琐的过程所花费的时间
  19. mutex.acquire()
  20. get_ticket()
  21. mutex.release()
  22. if __name__ == '__main__':
  23. mutex=Lock()
  24. for i in range(50):
  25. p=Process(target=task,args=(mutex,))
  26. p.start()

模拟抢票

五、process对象的其他属性补充

  1. from multiprocessing import Process
  2. import os
  3. import time
  4. def work():
  5. print('%s is working' %os.getpid())
  6. time.sleep(3)
  7. if __name__ == '__main__':
  8. p1=Process(target=work)
  9. p2=Process(target=work)
  10. p3=Process(target=work)
  11. p1.daemon=True
  12. p2.daemon=True
  13. p3.daemon=True
  14. p1.start() #初始化1
  15. p2.start() #初始化2
  16. p3.start() #初始化3
  17.  
  18. p3.join()
  19. p1.join()
  20. p2.join()
  21. print('基于初始化的结果来继续运行')

process属性补充1

  1. from multiprocessing import Process
  2. import os
  3. import time
  4. def work():
  5. print('%s is working' %os.getpid())
  6. time.sleep(3)
  7. if __name__ == '__main__':
  8. p1=Process(target=work)
  9. # p2=Process(target=work)
  10. # p3=Process(target=work)
  11. p1.start() #初始化1
  12. # p2.start() #初始化2
  13. # p3.start() #初始化3
  14.  
  15. # p1.terminate()
  16. # time.sleep(3)
  17. # print(p1.is_alive())
  18. print(p1.name)
  19. print(p1.pid)
  20. print('基于初始化的结果来继续运行')

process属性补充2

 

python之进程----Queue的更多相关文章

  1. Python开发【笔记】:what?进程queue还能生产出线程!

    进程queue底层用线程传输数据 import threading import multiprocessing def main(): queue = multiprocessing.Queue() ...

  2. Python:进程

    由于GIL的存在,python一个进程同时只能执行一个线程.因此在python开发时,计算密集型的程序常用多进程,IO密集型的使用多线程 1.多进程创建: #创建方法1:将要执行的方法作为参数传给Pr ...

  3. python中的Queue(队列)详解

    一.Queue简介 python中的队列分类可分为两种: 1.线程Queue,也就是普通的Queue 2.进程Queue,在多线程与多进程会介绍. Queue的种类: FIFO:  Queue.Que ...

  4. python 之进程篇

    多线程给我们的感觉 1.因为GIL的存在,一个进程的多线程同一时刻只能进去一个,感觉是假的并发 2.只适合I/O密集型的任务 3.针对计算密集型,就挂了(变成串行了) 在python中想要充分利用多核 ...

  5. Python之进程

    进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在当代 ...

  6. {Python之进程} 背景知识 什么是进程 进程调度 并发与并行 同步\异步\阻塞\非阻塞 进程的创建与结束 multiprocess模块 进程池和mutiprocess.Poll

    Python之进程 进程 本节目录 一 背景知识 二 什么是进程 三 进程调度 四 并发与并行 五 同步\异步\阻塞\非阻塞 六 进程的创建与结束 七 multiprocess模块 八 进程池和mut ...

  7. python开发进程:共享数据&进程池

    一,共享数据 展望未来,基于消息传递的并发编程是大势所趋 即便是使用线程,推荐做法也是将程序设计为大量独立的线程集合 通过消息队列交换数据.这样极大地减少了对使用锁定和其他同步手段的需求, 还可以扩展 ...

  8. python的进程和线程

    关于进程: An executing instance of a program is called a process.程序的执行实例称为进程. Each process provides the ...

  9. Python之进程 进阶 下

    在python程序中的进程操作 之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创建的.因此,运行起 ...

随机推荐

  1. php基础函数

    函数四要素:返回类型(php没有返回类型), 函数名,参数列表,函数体//php定义函数的方式  简单 例://function show(){//    echo "狗头铡伺候" ...

  2. 最新eclipse国内镜像站,比ustc等站点资源新。

    http://mirrors.neusoft.edu.cn/ 东软信息学院的镜像站,上面可以看到同步时间和状态很不错. 之前为了找最新的镜像站下载babel_language_packs r0.15. ...

  3. Python学习笔记2:构造序列:列表推导和生成器表达式

    欢迎访问个人网站:www.comingnext.cn 1. 关于Python内置序列类型 a. 按能否存放不同类型的数据区分 容器序列: list.tuple 和collections.deque这些 ...

  4. APP测试容易忽略的地方

    我们手机APP测试,主要针对的是android和ios两大主流操作系统,总体上来说android手机型号.版本多,bug也多:ios相对bug少.下面就针对Android说一下最容易忽略的测试点吧. ...

  5. C#和NewSQL更配 —— TiDB入门(可能是C#下的全网首发)

    阅读目录 背景 TiDB是什么 环境部署 实战 性能测试 结语 一.背景 在上一篇尝试CockroachDB(传送门在此:http://www.cnblogs.com/Zachary-Fan/p/co ...

  6. struts2-请求参数校验

    校验的分类 : 客户端数据校验 和 服务器端数据校验 客户端数据校验 ,通过JavaScript 完成校验 (改善用户体验,使用户减少出错 ) 服务器数据校验 ,使用框架内置校验功能 (struts2 ...

  7. linux Module驱动开发-一切刚刚开始

    linux内核是可以高度定制的,通过配置编译选项达到定制的目的. 在配置kernel编译选项时驱动程序的编译选项一般有三种,不编译.编译为内核驱动.编译为模块驱动.所以linux驱动一般分为两类,内核 ...

  8. spring-session 共享

    Spring session 共享 一.引入依赖 <dependency> <groupId>redis.clients</groupId> <artifac ...

  9. java匿名内部类举例

    public class Test { public static void main(String[] args) { //4.匿名内部类 //主要是针对那些不能直接创建对象的抽象类和接口而来的 S ...

  10. django富文本编辑器

    -------------------tinymce富文本编辑器1.下载安装 1.在网站pypi网站搜索并下载"django-tinymce-2.4.0" 2.解压:tar zxv ...