大米CMS官网论坛,大米站长联盟,大米站长之家,大米开发者社区

 找回密码
 注册大米会员

QQ登录

只需一步,快速开始

查看: 2124|回复: 0
打印 上一主题 下一主题

python多线程处理队列实例

[复制链接]

500

主题

777

帖子

7657

积分

超级版主

Rank: 8Rank: 8

积分
7657

授权用户

跳转到指定楼层
楼主
发表于 2022-7-21 15:22:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. import queue
  2. import threading
  3. import time

  4. # 线程思路:
  5. # 创建任务队列workQueue,和创建多条线程,然后将任务队列传入多线程中,
  6. # 在线程运行中,使用线程锁循环将任务读出,再执行任务,使用join函数等待所有线程完成任务。


  7. exitFlag = 0


  8. class myThread(threading.Thread):
  9.     def __init__(self, threadID, name, q):
  10.         threading.Thread.__init__(self)
  11.         self.threadID = threadID
  12.         self.name = name
  13.         self.q = q

  14.     def run(self):
  15.         print("开启线程:" + self.name)
  16.         process_data(self.name, self.q)
  17.         print("退出线程:" + self.name)


  18. def process_data(threadName, q):
  19.     while not exitFlag:
  20.         queueLock.acquire()
  21.         if not workQueue.empty():
  22.             data = q.get()
  23.             queueLock.release()
  24.             print("%s processing %s" % (threadName, data))
  25.         else:
  26.             queueLock.release()
  27.         time.sleep(2)


  28. threadList = ["Thread-1", "Thread-2", "Thread-3"]
  29. nameList = ["One-queue", "Two-queue", "Three-queue", "Four-queue", "Five-queue"]


  30. # 线程锁
  31. queueLock = threading.Lock()
  32. # 队列
  33. workQueue = queue.Queue(10)

  34. threads = []
  35. threadID = 1

  36. # 创建新线程
  37. for tName in threadList:
  38.     thread = myThread(threadID, tName, workQueue)
  39.     thread.start()
  40.     threads.append(thread)
  41.     threadID += 1

  42. # 填充队列
  43. # 获取锁,用于线程同步
  44. queueLock.acquire()
  45. for word in nameList:
  46.     workQueue.put(word)

  47. # 释放锁,开启下一个线程
  48. queueLock.release()

  49. print("等待队列清空")
  50. # 分配任务到每个线程,等待队列清空
  51. while not workQueue.empty():
  52.     pass

  53. # 所有任务分配完成,通知线程是时候退出,即通知线程已经没有任务了,可以退出了
  54. exitFlag = 1

  55. # 等待所有线程完成
  56. for t in threads:
  57.     t.join()
  58. print("退出主线程")
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册大米会员

本版积分规则

QQ|小黑屋|大米CMS社区 ( 蜀ICP备11002200号-2广告联系:广告联系 

Powered by 大米CMS

© 2010-2020 大米CMS Inc.

快速回复 返回顶部 返回列表