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

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

 import multiprocessing
from threading import Lock, Thread
from queue import Queue
import time
import sys q = Queue() # numTag和Lock用来演示多线程同步
numTag = 0
lock = Lock() """
用来演示输出
"""
def print_num(item):
time.sleep(0.5)
# 声明numTag是全局变量,所有的线程都可以对其进行修改
global numTag
with lock:
numTag += 1
# 输出的时候加上'\r'可以让光标退到当前行的开始处,进而实现显示进度的效果
sys.stdout.write('\rQueue Item: {0}\tNumTag:{1}%'.format(str(item), str(numTag))) """
worker是一个中间件,把Queue接收到的值传给对应的功能函数进行处理
"""
def worker():
while True:
item = q.get()
if item is None:
break
print_num(item)
q.task_done() if __name__ == '__main__':
# 根据CPU的数量创建对应数量的线程
threadCount = multiprocessing.cpu_count()
for i in range(threadCount):
t = Thread(target=worker)
# 设置daemon为True, 可以让线程在主线程退出的时候一起结束
# 否则线程还会继续等待
t.daemon = True
t.start() # 通过Queue给线程传值
for i in range(100):
q.put(i) q.join()
print('')

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

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

Python多线程同步命令行模拟进度显示的更多相关文章

  1. 一个简单、易用的Python命令行(terminal)进度条库

    eprogress 是一个简单.易用的基于Python3的命令行(terminal)进度条库,可以自由选择使用单行显示.多行显示进度条或转圈加载方式,也可以混合使用. 示例 单行进度条 多行进度条 圆 ...

  2. Python argparse 处理命令行小结

    Python argparse 处理命令行小结 1. 关于argparse是python的一个命令行解析包,主要用于处理命令行参数 2. 基本用法test.py是测试文件,其内容如下: import ...

  3. 在windows中,如何使用cmd命令行窗口正确显示编码为utf-8格式的文字

    在windows中,如何使用cmd命令行窗口正确显示编码为utf-8格式的文字呢? 正确的步骤如下: 1, 打开cmd命令行窗口 2, 输入命令 >chcp 65001 数字65001代表的是c ...

  4. python多线程同步

    python多线程同步 作者:vpoet 日期:大约在夏季 import threading import time mylock = threading.RLock() num=0 class my ...

  5. Ubuntu切换root身份,命令行以中文显示

    很多VPS商给的默认用户名并不是root,用以下命令处理即可: 1.修改root密码 sudo passwd root 输入密码,回车,再确认一次即可 2.更改密码后切换root身份 su root ...

  6. Android 命令行模拟按键

    /***************************************************************************** * Android 命令行模拟按键 * 说 ...

  7. python多线程同步实例分析

    进程之间通信与线程同步是一个历久弥新的话题,对编程稍有了解应该都知道,但是细说又说不清.一方面除了工作中可能用的比较少,另一方面就是这些概念牵涉到的东西比较多,而且相对较深.网络编程,服务端编程,并发 ...

  8. 第十五章、Python多线程同步锁,死锁和递归锁

    目录 第十五章.Python多线程同步锁,死锁和递归锁 1. 引子: 2.同步锁 3.死锁 引子: 4.递归锁RLock 原理: 不多说,放代码 总结: 5. 大总结 第十五章.Python多线程同步 ...

  9. 更改命令行,完全显示hostname

    刚装完一台新服务器,想让命令行的能显示全部的hostname,查阅资料后,将$PS1的参数修改即可 1,echo $PS1 2,将其中的/h换成/H即可 3,我是在/etc/profile中加了一行 ...

随机推荐

  1. 记录android开发博客

    1.一国外android开发博客,值得关注 https://blog.stylingandroid.com/page/2/ 2.一个app设计博客,很赞 http://androidniceties. ...

  2. Small factorials Solved Problem code: FCTRL2

    import sys def fact(n): final = n while n > 1: final *= n - 1 n -= 1 return final #逻辑严谨,不要忘了retur ...

  3. 选址问题lingo求解

    大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang model : sets : H/h1..h2/:x , y , e ; L/l1..l6/: a ...

  4. a:hover和a:visited书写顺序的重要性

    2a:hover和a:visited书写顺序的重要性今天在用a:hover属性的时候发现一个奇怪的问题,同一个页面里面有些链接的a:hover效果不能正常表现出来.链接的代码是一样,没有使用其它样式固 ...

  5. 在C51中如何实现软复位?

    可以定义一个指向复位向量(0x0000)的函数指针,然后在C程序中需要软复位的地方调用该函数: ((void (code *) (void)) 0x0000) (); 例如,以下程序不断地复位: vo ...

  6. GetProcessMemoryInfo API取得进程所用的内存

    https://msdn.microsoft.com/en-us/library/windows/desktop/ms683219(v=vs.85).aspx 例子: https://msdn.mic ...

  7. 10个工具让你的 shell 脚本更强大

    10个工具让你的 shell 脚本更强大 很多人误以为shell脚本只能在命令行下使用.其实shell也可以调用一些GUI组件,例如菜单,警告框,进度条等等.你可以控制最终的输出,光标位 置还有各种输 ...

  8. eclipsecdt添加自动补全功能

    自动代码补全完全是一个改善生活质量的功能呀!cdt拥有自动代码补全功能,只是我们没有打开而已 1. 绑定快捷方式 1. windows -> preferences ->general-& ...

  9. mysql 中 LIMIT的简单用法

    mysql--语法: SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset --举例: select * from table l ...

  10. uva10245-The Closest Pair Problem(平面上的点分治)

    解析:平面上的点分治,先递归得到左右子区间的最小值d,再处理改区间,肯定不会考虑哪些距离已经大于d的点对,对y坐标归并排序,然后从小到大开始枚举更新d,对于某个点,x轴方向只用考虑[x-d,x+d]( ...