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天气预报采集器实现代码(网页爬虫)
Oct 07 Python
python图像处理之镜像实现方法
May 30 Python
Python+MongoDB自增键值的简单实现
Nov 04 Python
Pycharm学习教程(5) Python快捷键相关设置
May 03 Python
Python3.X 线程中信号量的使用方法示例
Jul 24 Python
python的中异常处理机制
Aug 30 Python
在python下使用tensorflow判断是否存在文件夹的实例
Jun 10 Python
python调用并链接MATLAB脚本详解
Jul 05 Python
使用pip安装python库的多种方式
Jul 31 Python
python实现俄罗斯方块小游戏
Apr 24 Python
QT5 Designer 打不开的问题及解决方法
Aug 20 Python
python使用XPath解析数据爬取起点小说网数据
Apr 22 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
mysql 的 like 问题,超强毕杀记!!!
2007/01/18 PHP
PHP删除数组中的特定元素的代码
2012/06/28 PHP
基于PHP常用字符串的总结(待续)
2013/06/07 PHP
Zend Framework缓存Cache用法简单实例
2016/03/19 PHP
PHP正则匹配到2个字符串之间的内容方法
2018/12/24 PHP
RSA实现JS前端加密与PHP后端解密功能示例
2019/08/05 PHP
PHP实现提取多维数组指定一列的方法总结
2019/12/04 PHP
JavaScript与Image加载事件(onload)、加载状态(complete)
2011/02/14 Javascript
通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
2011/05/07 Javascript
中文字符串截取的js函数代码
2013/04/17 Javascript
Jquery效果大全之制作电脑健康体检得分特效附源码下载
2015/11/02 Javascript
JS实现简单的右下角弹出提示窗口完整实例
2016/06/21 Javascript
AngularJS入门教程之多视图切换用法示例
2016/11/02 Javascript
JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
2017/01/23 Javascript
jsonp跨域请求实现示例
2017/03/13 Javascript
JavaScript实现动态添加Form表单元素的方法示例
2017/08/14 Javascript
Jquery使用each函数实现遍历及数组处理
2020/07/14 jQuery
jQuery实现动态加载瀑布流
2020/09/01 jQuery
[02:49]DAC2018决赛日TOP5 LGD开启黑暗之门绝杀VP
2018/04/08 DOTA
Python单链表的简单实现方法
2014/09/23 Python
Python编程argparse入门浅析
2018/02/07 Python
python中bytes和str类型的区别
2019/10/21 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
PyTorch中topk函数的用法详解
2020/01/02 Python
如何定义TensorFlow输入节点
2020/01/23 Python
python 基于opencv去除图片阴影
2021/01/26 Python
Volcom英国官方商店:美国殿堂级滑板、冲浪、滑雪服装品牌
2019/03/13 全球购物
意大利运动服减价商店:ScontoSport
2020/03/10 全球购物
商务英语专业自荐信
2013/10/14 职场文书
大学生英语演讲稿
2014/04/24 职场文书
投标保密承诺书
2014/05/19 职场文书
无财产离婚协议书范本
2014/10/28 职场文书
2015年幼儿园元旦亲子活动方案
2014/12/09 职场文书
入党自荐书范文
2015/03/05 职场文书
教师节随笔
2015/08/15 职场文书
原生JS实现分页
2022/04/19 Javascript