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中常用的各种数据库操作模块和连接实例
May 29 Python
使用Python的判断语句模拟三目运算
Apr 24 Python
详解python里使用正则表达式的全匹配功能
Oct 19 Python
PyQt5利用QPainter绘制各种图形的实例
Oct 19 Python
Mac安装python3的方法步骤
Aug 09 Python
django框架两个使用模板实例
Dec 11 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
Apr 22 Python
python可迭代对象去重实例
May 15 Python
详解python中GPU版本的opencv常用方法介绍
Jul 24 Python
Python图片处理之图片裁剪教程
May 27 Python
Appium中scroll和drag_and_drop根据元素位置滑动
Feb 15 Python
Python内置包对JSON文件数据进行编码和解码
Apr 12 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伪静态页面函数附使用方法
2008/06/20 PHP
FleaPHP的安全设置方法
2008/09/15 PHP
PHP children()函数讲解
2019/02/03 PHP
基于jQuery实现下拉收缩(展开与折叠)特效
2012/12/25 Javascript
Node.js中的事件驱动编程详解
2014/08/16 Javascript
JS实现新浪微博效果带遮罩层的弹出框代码
2015/10/12 Javascript
JSON简介以及用法汇总
2016/02/21 Javascript
使用jquery提交form表单并自定义action的方法
2016/05/25 Javascript
nodejs加密Crypto的实例代码
2016/07/07 NodeJs
vue生成随机验证码的示例代码
2017/09/29 Javascript
vue组件之Alert的实现代码
2017/10/17 Javascript
React数据传递之组件内部通信的方法
2017/12/31 Javascript
vue2.0基于vue-cli+element-ui制作树形treeTable
2019/04/30 Javascript
vue滚动插件better-scroll使用详解
2019/10/18 Javascript
vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例
2019/11/13 Javascript
jQuery实现王者荣耀手风琴效果
2020/01/17 jQuery
利用vue3+ts实现管理后台(增删改查)
2020/10/30 Javascript
Python中的变量和作用域详解
2016/07/13 Python
使用python 3实现发送邮件功能
2018/06/15 Python
详解Python学习之安装pandas
2019/04/16 Python
学习python分支结构
2019/05/17 Python
通过python实现随机交换礼物程序详解
2019/07/10 Python
Django框架创建mysql连接与使用示例
2019/07/29 Python
Python unittest框架操作实例解析
2020/04/13 Python
使用gunicorn部署django项目的问题
2020/12/30 Python
html5+css3实现一款注册表单实例
2013/04/17 HTML / CSS
HTML5 video标签(播放器)学习笔记(二):播放控制
2015/04/24 HTML / CSS
SEPHORA新西兰官方网站:购买化妆品和护肤品
2016/12/02 全球购物
Hotter Shoes英国官网:英伦风格,舒适的鞋子
2017/12/28 全球购物
港湾网络笔试题
2014/04/19 面试题
机电专业个人自荐信格式模板
2013/09/23 职场文书
小学运动会开幕词
2015/01/28 职场文书
2015应届毕业生自荐信范文
2015/03/05 职场文书
师范生教育见习总结
2015/06/23 职场文书
追讨欠款律师函
2015/06/24 职场文书
2019年员工旷工保证书!
2019/06/28 职场文书