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程序设计入门(5)类的使用简介
Jun 16 Python
python简单程序读取串口信息的方法
Mar 13 Python
实例讲解Python中函数的调用与定义
Mar 14 Python
python和ruby,我选谁?
Sep 13 Python
Python实现发送与接收邮件的方法详解
Mar 28 Python
python实现判断一个字符串是否是合法IP地址的示例
Jun 04 Python
python交换两个变量的值方法
Jan 12 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
Jun 05 Python
使用python快速在局域网内搭建http传输文件服务的方法
Nov 14 Python
Python 实现opencv所使用的图片格式与 base64 转换
Jan 09 Python
Tensorflow全局设置可见GPU编号操作
Jun 30 Python
pytorch Dropout过拟合的操作
May 27 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/04/23 PHP
php格式化时间戳显示友好的时间实现思路及代码
2014/10/23 PHP
php数组生成html下拉列表的方法
2015/07/20 PHP
js 自定义的联动下拉框
2010/02/07 Javascript
jQuery学习笔记[1] jQuery中的DOM操作
2010/12/03 Javascript
jquery select动态加载选择(兼容各种浏览器)
2013/02/01 Javascript
jQuery获取CSS样式中的颜色值的问题,不同浏览器格式不同的解决办法
2013/05/13 Javascript
JS设置获取cookies的方法
2014/01/26 Javascript
JavaScript中字符串拼接的基本方法
2015/07/07 Javascript
可以浮动某个物体的jquery控件用法实例
2015/07/24 Javascript
javascript定义类和类的实现实例详解
2015/12/01 Javascript
微信小程序(三):网络请求
2017/01/13 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
2017/03/04 Javascript
以BootStrap Tab为例写一个前端组件
2017/07/25 Javascript
关于axios如何全局注册浅析
2018/01/14 Javascript
JavaScript 面向对象基础简单示例
2019/10/02 Javascript
Vue全局使用less样式,组件使用全局样式文件中定义的变量操作
2020/10/21 Javascript
netbeans7安装python插件的方法图解
2013/12/24 Python
Python反爬虫技术之防止IP地址被封杀的讲解
2019/01/09 Python
Python函数返回不定数量的值方法
2019/01/22 Python
详解python执行shell脚本创建用户及相关操作
2019/04/11 Python
python学习--使用QQ邮箱发送邮件代码实例
2019/04/16 Python
Python 中的 global 标识对变量作用域的影响
2019/08/12 Python
对python中的装包与解包实例详解
2019/08/24 Python
python可迭代对象去重实例
2020/05/15 Python
戴森比利时官方网站:Dyson BE
2020/10/03 全球购物
一套Delphi的笔试题二
2013/05/11 面试题
网络工程与软件技术毕业生自荐信
2013/09/24 职场文书
文秘专业大学生求职信
2013/11/10 职场文书
火锅店的活动方案
2014/08/15 职场文书
反四风对照检查材料思想汇报
2014/09/16 职场文书
离婚协议书范文2014
2014/10/16 职场文书
2014年党的群众路线活动个人整改措施
2014/10/28 职场文书
酒店辞职书怎么写
2015/02/26 职场文书
2015年保洁工作总结范文
2015/04/28 职场文书
八年级语文教学反思
2016/03/03 职场文书