0x00:前言

线程之间有时需要通信,操作系统提供了很多机制来实现进程间的通信,其中我们使用最多的是队列Queue.

0x01:Queue的原理

Queue是一个先进先出(First In First Out)的队列,主进程中创建一个Queue对象,并作为参数传入子进程,两者之间通过put( )放入数据,通过get( )取出数据,执行了get( )函数之后队列中的数据会被同时删除,可以使用multiprocessing模块的Queue实现多进程之间的数据传递。

  1. import threading, queue
  2. import time
  3. def produce():
  4. for i in range(10):
  5. time.sleep(0.5)
  6. print('生产++++++面包{} {}'.format(threading.current_thread().name, i))
  7. q.put('{}{}'.format(threading.current_thread().name, i))
  8. def consumer():
  9. while True:
  10. time.sleep(1)
  11. # q.get()方法时一个阻塞的方法
  12. print('{}买到------面包{}'.format(threading.current_thread().name, q.get()))
  13. q = queue.Queue() # 创建一个q
  14. # 一条生产线
  15. pa = threading.Thread(target=produce, name='pa')
  16. pb = threading.Thread(target=produce, name='pb')
  17. pc = threading.Thread(target=produce, name='pc')
  18. # 一条消费线
  19. ca = threading.Thread(target=consumer, name='ca')
  20. cb = threading.Thread(target=consumer, name='cb')
  21. cc = threading.Thread(target=consumer, name='cc')
  22. pa.start()
  23. pb.start()
  24. pc.start()
  25. ca.start()
  26. cb.start()
  27. cc.start()