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使用htmllib分析网页内容的方法
May 08 Python
Python爬虫爬验证码实现功能详解
Apr 14 Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
Feb 21 Python
解决python写入带有中文的字符到文件错误的问题
Jan 31 Python
Python 使用多属性来进行排序
Sep 01 Python
Python面向对象中类(class)的简单理解与用法分析
Feb 21 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
Apr 25 Python
宝塔面板成功部署Django项目流程(图文)
Jun 22 Python
用python实现前向分词最大匹配算法的示例代码
Aug 06 Python
浅谈Python 钉钉报警必备知识系统讲解
Aug 17 Python
Django使用echarts进行可视化展示的实践
Jun 10 Python
Python Django项目和应用的创建详解
Nov 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.ini中文版
2006/10/09 PHP
PHP远程连接MYSQL数据库非常慢的解决方法
2008/07/05 PHP
JavaScript Eval 函数使用
2010/03/23 Javascript
javascript 面向对象的JavaScript类
2010/05/04 Javascript
7个JS基础知识总结
2014/03/05 Javascript
javascript数组详解
2014/10/22 Javascript
关于javascript模块加载技术的一些思考
2014/11/28 Javascript
javascript数组克隆简单实现方法
2015/12/16 Javascript
Angularjs 滚动加载更多数据
2016/03/17 Javascript
jQuery实现图片加载完成后改变图片大小的方法
2016/03/29 Javascript
js实现百度地图定位于地址逆解析,显示自己当前的地理位置
2016/12/08 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
JS实现直接运行html代码的方法
2017/03/13 Javascript
JavaScript条件判断_动力节点Java学院整理
2017/06/26 Javascript
微信小程序实现列表下拉刷新上拉加载
2020/07/29 Javascript
vue.js内置组件之keep-alive组件使用
2018/07/10 Javascript
element vue Array数组和Map对象的添加与删除操作
2018/11/14 Javascript
vue项目中锚点定位替代方式
2019/11/13 Javascript
使用vue构建多页面应用的示例
2020/10/22 Javascript
使用PyInstaller将Python程序文件转换为可执行程序文件
2016/07/08 Python
python中利用Future对象异步返回结果示例代码
2017/09/07 Python
Tornado高并发处理方法实例代码
2018/01/15 Python
TensorFlow实现卷积神经网络CNN
2018/03/09 Python
Python基于TCP实现会聊天的小机器人功能示例
2018/04/09 Python
python实现爬山算法的思路详解
2019/04/09 Python
详解python实现小波变换的一个简单例子
2019/07/18 Python
Python使用lambda表达式对字典排序操作示例
2019/07/25 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
2020/04/22 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
CSS实现定位元素居中的方法
2015/06/23 HTML / CSS
HTML5 播放 RTSP 视频的实例代码
2019/07/29 HTML / CSS
幼师专业毕业生自荐信
2013/09/29 职场文书
员工工作表扬信范文
2014/01/13 职场文书
关于奉献的演讲稿
2014/05/21 职场文书
付款承诺函范文
2015/01/21 职场文书
Java中的Kafka为什么性能这么快及4大核心详析
2022/09/23 Java/Android