zoukankan      html  css  js  c++  java
  • Python多线程同步命令行模拟进度显示

    最近在一个Python(3.5)的小项目中需要用到多线程加快处理速度,同时需要显示进度,于是查了些资料找到几个实现方法:线程池的map-reduce和Queue结合线程的实现。这里简单的实例介绍一下Queue结合线程的实现方法。

    这个示例的主要功能是利用Queue和Thread模拟一个固定线程数的线程池,实现一个命令行窗口里的进度显示,比如(1%~100%)。

     1 import multiprocessing
     2 from threading import Lock, Thread
     3 from queue import Queue
     4 import time
     5 import sys
     6 
     7 q = Queue()
     8 
     9 # numTag和Lock用来演示多线程同步
    10 numTag = 0
    11 lock = Lock()
    12 
    13 """
    14     用来演示输出
    15 """
    16 def print_num(item):
    17     time.sleep(0.5)
    18     # 声明numTag是全局变量,所有的线程都可以对其进行修改
    19     global numTag
    20     with lock:
    21         numTag += 1
    22         # 输出的时候加上'
    '可以让光标退到当前行的开始处,进而实现显示进度的效果
    23         sys.stdout.write('
    Queue Item: {0}	NumTag:{1}%'.format(str(item), str(numTag)))
    24 
    25 """
    26     worker是一个中间件,把Queue接收到的值传给对应的功能函数进行处理
    27 """
    28 def worker():
    29     while True:
    30         item = q.get()
    31         if item is None:
    32             break
    33         print_num(item)
    34         q.task_done()
    35 
    36 if __name__ == '__main__':
    37     # 根据CPU的数量创建对应数量的线程
    38     threadCount = multiprocessing.cpu_count()
    39     for i in range(threadCount):
    40         t = Thread(target=worker)
    41         # 设置daemon为True, 可以让线程在主线程退出的时候一起结束
    42         # 否则线程还会继续等待
    43         t.daemon = True
    44         t.start()
    45 
    46     # 通过Queue给线程传值
    47     for i in range(100):
    48         q.put(i)
    49 
    50     q.join()
    51     print('')

    最终输出结果(进度会以每0.5秒增长4%的速度进行更新):

    参考链接:https://docs.python.org/3.5/library/queue.html#Queue.Queue

  • 相关阅读:
    gcc 不同平台不同宏写法 Function Multiversioning
    linux win10 挂载 C盘 系统盘 ntfs 问题 休眠 快速启动关闭了
    archlinux wine
    ssm批量操作易错点
    行政区划代码
    ssm获取session
    layui 批量删除点击不起作用
    layui分页失效问题
    java 获取服务器配置信息【使用sigar、sql语句、ServerInfo】
    ssm中html跳转之后乱码
  • 原文地址:https://www.cnblogs.com/silverbullet11/p/Python-Queue-multithread.html
Copyright © 2011-2022 走看看