test_process_joinablequeue.py 824 B

1234567891011121314151617181920212223242526272829303132
  1. # coding:utf-8
  2. from multiprocessing import Process, JoinableQueue
  3. import time, random
  4. a = 3
  5. def consumer(q):
  6. while True:
  7. print(a)
  8. res = q.get()
  9. print('消费者拿到了 %s' % res)
  10. q.task_done()
  11. def producer(seq, q):
  12. global a
  13. for item in seq:
  14. a += 1
  15. print(a)
  16. time.sleep(random.randrange(1,2))
  17. q.put(item)
  18. print('生产者做好了 %s' % item)
  19. q.join()
  20. if __name__ == "__main__":
  21. q = JoinableQueue()
  22. seq = ('产品%s' % i for i in range(5))
  23. p = Process(target=consumer, args=(q,))
  24. p.daemon = True # 设置为守护进程,在主线程停止时p也停止,但是不用担心,producer内调用q.join保证了consumer已经处理完队列中的所有元素
  25. p.start()
  26. producer(seq, q)
  27. print('主线程')