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 自动安装 Rising 杀毒软件
Apr 24 Python
python基于queue和threading实现多线程下载实例
Oct 08 Python
详解python单例模式与metaclass
Jan 15 Python
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
Jan 24 Python
selenium+python自动化测试之多窗口切换
Jan 23 Python
Python实现去除图片中指定颜色的像素功能示例
Apr 13 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
Aug 15 Python
Python模块汇总(常用第三方库)
Oct 07 Python
通过实例解析Python调用json模块
Dec 11 Python
Pyecharts绘制全球流向图的示例代码
Jan 08 Python
Python 列表的清空方式
Jan 13 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
Dec 04 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
ASP知识讲座四
2006/10/09 PHP
ajax php传递和接收变量实现思路及代码
2012/12/19 PHP
php中读写文件与读写数据库的效率比较分享
2013/10/19 PHP
PHP原生函数一定好吗?
2014/12/08 PHP
64位windows系统下安装Memcache缓存
2015/12/06 PHP
Yii CFileCache 获取不到值的原因分析
2017/02/08 PHP
PHP中Notice错误常见解决方法
2017/04/28 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
php中的钩子理解及应用实例分析
2019/08/30 PHP
在Laravel的Model层做数据缓存的实现
2019/09/26 PHP
在laravel中实现ORM模型使用第二个数据库设置
2019/10/24 PHP
javascript实现的鼠标链接提示效果生成器代码
2007/06/28 Javascript
不使用中间变量,交换int型的 a, b两个变量的值。
2010/10/29 Javascript
js对象的构造和继承实现代码
2010/12/05 Javascript
jQuery学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
2013/04/08 Javascript
jquery和javascript的区别(常用方法比较)
2013/07/04 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
JavaScript检测弹出窗口是否已经关闭的方法
2015/03/24 Javascript
NodeJS实现客户端js加密
2017/01/09 NodeJs
webpack 2的react开发配置实例代码
2017/07/28 Javascript
Node.js的进程管理的深入理解
2019/01/09 Javascript
浅谈Vue项目骨架屏注入实践
2019/08/05 Javascript
[02:16]DOTA2超级联赛专访Burning 逆袭需要抓住机会
2013/06/24 DOTA
[01:03:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第一场 1月29日
2021/03/11 DOTA
Python 基础教程之str和repr的详解
2017/08/20 Python
了解不常见但是实用的Python技巧
2019/05/23 Python
Win10环境中如何实现python2和python3并存
2020/07/20 Python
python中pathlib模块的基本用法与总结
2020/08/17 Python
美国户外烹饪产品购物网站:Outdoor Cooking
2020/01/10 全球购物
就业自我评价
2014/02/04 职场文书
爱我中华演讲稿
2014/05/20 职场文书
水污染治理工程专业自荐信
2014/06/21 职场文书
离婚承诺书格式范文
2015/05/04 职场文书
道歉信范文
2015/05/12 职场文书
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle
详解Javascript实践中的命令模式
2021/05/05 Javascript