多线程队列.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import threading
  2. import time
  3. import queue
  4. q = queue.Queue(10)
  5. threadLock = threading.Lock()
  6. class myThread(threading.Thread):
  7. def __init__(self, threadID, name):
  8. threading.Thread.__init__(self)
  9. self.threadID = threadID
  10. self.name = name
  11. self.exitFlag = 0
  12. def run(self):
  13. while not self.exitFlag:
  14. threadLock.acquire()
  15. if not q.empty():
  16. id = q.get()
  17. print_time(self.name, id)
  18. threadLock.release()
  19. else:
  20. threadLock.release()
  21. def print_time(threadName, id):
  22. print ("%s:%s:%s"%(threadName,time.ctime(time.time()),id))
  23. # 创建3个线程
  24. threads = []
  25. for i in range(3):
  26. name = "Thread-%d" % i
  27. t = myThread(i, name)
  28. t.start()
  29. threads.append(t)
  30. print(threads)
  31. # 新增队列数据
  32. for i in range(10000):
  33. q_name = "Queue:%d" % i
  34. q.put(q_name)
  35. # 等待队列清空
  36. while not q.empty():
  37. pass
  38. # 也可以join方法,与上同效
  39. # q.join()
  40. # 通知线程,处理完之后关闭
  41. for t in threads:
  42. t.exitFlag = 1
  43. # 等待所有线程结束之后才退出
  44. for t in threads:
  45. t.join()
  46. print("Exiting Main Thread")