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中利用await关键字如何等待Future对象完成详解
Sep 07 Python
Python中xrange与yield的用法实例分析
Dec 26 Python
对numpy中数组转置的求解以及向量内积计算方法
Oct 31 Python
人工神经网络算法知识点总结
Jun 11 Python
Python定时任务APScheduler的实例实例详解
Jul 22 Python
TensorFlow——Checkpoint为模型添加检查点的实例
Jan 21 Python
使用tensorboard可视化loss和acc的实例
Jan 21 Python
python的sys.path模块路径添加方式
Mar 09 Python
python 将视频 通过视频帧转换成时间实例
Apr 23 Python
django rest framework 自定义返回方式
Jul 12 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
Aug 17 Python
用python基于appium模块开发一个自动收取能量的小助手
Sep 25 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+DBM的同学录程序(3)
2006/10/09 PHP
yii框架中的Url生产问题小结
2012/01/16 PHP
php模拟js函数unescape的函数代码
2012/10/20 PHP
ThinkPHP2.x防范XSS跨站攻击的方法
2015/09/25 PHP
Zend Framework教程之前端控制器Zend_Controller_Front用法详解
2016/03/07 PHP
给大家分享几个常用的PHP函数
2017/01/15 PHP
Laravel find in set排序实例
2019/10/09 PHP
javascript onkeydown,onkeyup,onkeypress,onclick,ondblclick
2009/02/04 Javascript
理解Javascript_01_理解内存分配原理分析
2010/10/11 Javascript
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
2011/04/27 Javascript
ECMAScript6的新特性箭头函数(Arrow Function)详细介绍
2014/06/07 Javascript
JavaScript实现关键字高亮功能
2014/11/12 Javascript
Jquery删除css属性的简单方法
2016/12/04 Javascript
vue组件watch属性实例讲解
2017/11/07 Javascript
layui的table单击行勾选checkbox功能方法
2018/08/14 Javascript
jQuery简单实现根据日期计算星期几的方法
2019/01/09 jQuery
详解一个小实例理解js原型和继承
2019/04/24 Javascript
js闭包和垃圾回收机制示例详解
2021/03/01 Javascript
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
2020/04/11 Python
python基于win32api实现键盘输入
2020/12/09 Python
css3 旋转按钮 使用CSS3创建一个旋转可变色按钮
2012/12/31 HTML / CSS
CSS3 中的@keyframes介绍
2014/09/02 HTML / CSS
Staples美国官方网站:办公用品一站式采购
2016/07/28 全球购物
工业自动化专业毕业生推荐信
2013/11/18 职场文书
自荐书模板
2013/12/15 职场文书
创业计划书的写作技巧及要点
2014/01/31 职场文书
开展党的群众路线教育实践活动方案
2014/02/05 职场文书
作风建设演讲稿
2014/05/23 职场文书
民族精神月活动总结
2014/08/28 职场文书
中学生纪念九一八事变演讲稿
2014/09/14 职场文书
初中家长评语大全
2014/12/26 职场文书
幼儿园三八妇女节活动总结
2015/02/06 职场文书
2015年社区综治工作总结
2015/04/21 职场文书
Python离线安装openpyxl模块的步骤
2021/03/30 Python
为什么node.js不适合大型项目
2021/04/28 Javascript
SQL SERVER中的流程控制语句
2022/05/25 SQL Server