python实现多线程的方式及多条命令并发执行


Posted in Python onJune 07, 2016

一、概念介绍

Thread 是threading模块中最重要的类之一,可以使用它来创建线程。有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法;另一种是创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入.
Thread模块是比较底层的模块,Threading模块是对Thread做了一些包装的,可以更加方便的被使用。
另外在工作时,有时需要让多条命令并发的执行, 而不是顺序执行。

二、代码样例

#!/usr/bin/python
# encoding=utf-8
# Filename: thread-extends-class.py
# 直接从Thread继承,创建一个新的class,把线程执行的代码放到这个新的 class里
import threading
import time
 
class ThreadImpl(threading.Thread):
 def __init__(self, num):
  threading.Thread.__init__(self)
  self._num = num
 
 def run(self):
  global total, mutex
  
  # 打印线程名
  print threading.currentThread().getName()
 
  for x in xrange(0, int(self._num)):
   # 取得锁
   mutex.acquire()
   total = total + 1
   # 释放锁
   mutex.release()
 
if __name__ == '__main__':
 #定义全局变量
 global total, mutex
 total = 0
 # 创建锁
 mutex = threading.Lock()
 
 #定义线程池
 threads = []
 # 创建线程对象
 for x in xrange(0, 40):
  threads.append(ThreadImpl(100))
 # 启动线程
 for t in threads:
  t.start()
 # 等待子线程结束
 for t in threads:
  t.join() 
 
 # 打印执行结果
 print total
#!/usr/bin/python
# encoding=utf-8
# Filename: thread-function.py
# 创建线程要执行的函数,把这个函数传递进Thread对象里,让它来执行

import threading
import time
 
def threadFunc(num):
 global total, mutex
 
 # 打印线程名
 print threading.currentThread().getName()
 
 for x in xrange(0, int(num)):
  # 取得锁
  mutex.acquire()
  total = total + 1
  # 释放锁
  mutex.release()
 
def main(num):
 #定义全局变量
 global total, mutex
 total = 0
 # 创建锁
 mutex = threading.Lock()
 
 #定义线程池
 threads = []
 # 先创建线程对象
 for x in xrange(0, num):
  threads.append(threading.Thread(target=threadFunc, args=(100,)))
 # 启动所有线程
 for t in threads:
  t.start()
 # 主线程中等待所有子线程退出
 for t in threads:
  t.join() 
  
 # 打印执行结果
 print total
 
 
if __name__ == '__main__':
 # 创建40个线程
 main(40)
#!/usr/bin/python
# encoding=utf-8
# Filename: put_files_hdfs.py
# 让多条命令并发执行,如让多条scp,ftp,hdfs上传命令并发执行,提高程序运行效率
import datetime
import os
import threading

def execCmd(cmd):
 try:
  print "命令%s开始运行%s" % (cmd,datetime.datetime.now())
  os.system(cmd)
  print "命令%s结束运行%s" % (cmd,datetime.datetime.now())
 except Exception, e:
  print '%s\t 运行失败,失败原因\r\n%s' % (cmd,e)

if __name__ == '__main__':
 # 需要执行的命令列表
 cmds = ['ls /root',
    'pwd',]
 
 #线程池
 threads = []
 
 print "程序开始运行%s" % datetime.datetime.now()

 for cmd in cmds:
  th = threading.Thread(target=execCmd, args=(cmd,))
  th.start()
  threads.append(th)
   
 # 等待线程运行完毕
 for th in threads:
  th.join()
   
 print "程序结束运行%s" % datetime.datetime.now()

以上就是本文的全部内容,希望对大家学习python程序设计有所帮助。

Python 相关文章推荐
python通过wxPython打开一个音频文件并播放的方法
Mar 25 Python
win10 64bit下python NLTK安装教程
Sep 19 Python
Django forms组件的使用教程
Oct 08 Python
解决安装python库时windows error5 报错的问题
Oct 21 Python
python的继承知识点总结
Dec 10 Python
Python中的字符串切片(截取字符串)的详解
May 15 Python
python中 * 的用法详解
Jul 10 Python
使用python实现kNN分类算法
Oct 16 Python
Python argparse模块使用方法解析
Feb 20 Python
pycharm解决关闭flask后依旧可以访问服务的问题
Apr 03 Python
详解torch.Tensor的4种乘法
Sep 03 Python
pycharm进入时每次都是insert模式的解决方式
Feb 05 Python
python多线程方式执行多个bat代码
Jun 07 #Python
使用rst2pdf实现将sphinx生成PDF
Jun 07 #Python
python监控文件或目录变化
Jun 07 #Python
浅析Python中的多条件排序实现
Jun 07 #Python
Python卸载模块的方法汇总
Jun 07 #Python
Python运行报错UnicodeDecodeError的解决方法
Jun 07 #Python
PyCharm使用教程之搭建Python开发环境
Jun 07 #Python
You might like
PHP基础知识介绍
2013/09/17 PHP
PHP连接sql server 2005环境配置及问题解决
2014/08/08 PHP
php字符串截取函数用法分析
2014/11/25 PHP
PHP7标量类型declare用法实例分析
2016/09/26 PHP
jquery 应用代码 方便的排序功能
2010/02/06 Javascript
jQuery功能函数详解
2015/02/01 Javascript
javascript实现随时变化着的背景颜色
2015/04/02 Javascript
jQuery的几个我们必须了解的特点
2015/05/03 Javascript
js点击列表文字对应该行显示背景颜色的实现代码
2015/08/05 Javascript
简单谈谈javascript中的变量、作用域和内存问题
2015/08/30 Javascript
jQuery基于muipicker实现仿ios时间选择
2016/02/22 Javascript
Bootstrap中datetimepicker使用小结
2016/12/28 Javascript
JavaScript 函数节流详解及方法总结
2017/02/09 Javascript
微信小程序progress组件使用详解
2018/01/31 Javascript
vue的全局变量和全局拦截请求器的示例代码
2018/09/13 Javascript
记一次用vue做的活动页的方法步骤
2019/04/11 Javascript
微信小程序—setTimeOut定时器的问题及解决
2019/07/26 Javascript
微信小程序登录时如何获取input框中的内容
2019/12/04 Javascript
Element InfiniteScroll无限滚动的具体使用方法
2020/07/27 Javascript
Python threading多线程编程实例
2014/09/18 Python
Python中列表元素转为数字的方法分析
2016/06/14 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
2018/06/14 Python
使用Python横向合并excel文件的实例
2018/12/11 Python
python游戏地图最短路径求解
2019/01/16 Python
python实现剪切功能
2019/01/23 Python
学习python可以干什么
2019/02/26 Python
python 实现返回一个列表中出现次数最多的元素方法
2019/06/11 Python
Pycharm最常用的快捷键及使用技巧
2020/03/05 Python
python绘图模块之利用turtle画图
2021/02/12 Python
新加坡航空官方网站:Singapore Airlines
2016/10/13 全球购物
Senreve官网:美国旧金山的奢侈手袋品牌
2019/03/21 全球购物
保险公司早会主持词
2014/03/22 职场文书
2014年党员个人工作总结
2014/12/02 职场文书
学校禁毒宣传活动总结
2015/05/08 职场文书
JS前端使用Canvas快速实现手势解锁特效
2022/09/23 Javascript
Mysql如何查看是否使用到索引
2022/12/24 MySQL