Queue 队列模块

队列与并发使用案例

  1. #coding=utf-8
  2. import threading
  3. from time import ctime,sleep
  4. import Queue
  5. #only for test sleep in random mode
  6. import random
  7. # 执行方法实体
  8. def extract():
  9. # 不停监控队列变化
  10. while True:
  11. # 取出队列中的值
  12. i = q.get()
  13. print i
  14. #sleep(random.randint(1, 10))
  15. sleep(2)
  16. # 向任务已经完成的队列发送一个信号
  17. q.task_done()
  18. if __name__ == '__main__':
  19. # 定义先进先出的队列
  20. q = Queue.Queue()
  21. # 设置线程数
  22. num_thread_pool=5
  23. # 等待放入队列的 1 - 50 的 list
  24. srctbl = range(1, 50)
  25. # list 放入队列中
  26. for i in range(0, len(srctbl)):
  27. curTb = (srctbl[i],i)
  28. q.put(curTb)
  29. # 开一个线程消费队列
  30. #extract()
  31. # 开 5 个线程, 消费队列
  32. for i in range(num_thread_pool):
  33. # 并发执行每个任务
  34. th = threading.Thread(target=extract)
  35. # 非守护进程,父进程会等待所有子进程执行完毕,父进程才会退出
  36. #th.setDaemon(False)
  37. # 守护进程 (子线程启动后,父进程不等待子进程结束,继续执行,当父进程执行完毕,子进程也一起退出)
  38. th.setDaemon(True)
  39. th.start()
  40. # 等待队列为空再执行
  41. q.join()
  42. print "all over %s" %ctime()
  43. `