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之数据类型总结
Sep 24 Python
Python常用内置函数总结
Feb 08 Python
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
Apr 27 Python
Python中easy_install 和 pip 的安装及使用
Jun 05 Python
三步实现Django Paginator分页的方法
Jun 11 Python
python numpy 反转 reverse示例
Dec 04 Python
pip安装tensorflow的坑的解决
Apr 19 Python
Python run()函数和start()函数的比较和差别介绍
May 03 Python
如何用Python和JS实现的Web SSH工具
Feb 23 Python
python定义具名元组实例操作
Feb 28 Python
Python爬虫实战之爬取携程评论
Jun 02 Python
Python+SeaTable实现计算两个日期间的工作日天数
Jul 07 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
克隆一个新项目的快捷方式
2013/04/10 PHP
PHP正则替换函数preg_replace和preg_replace_callback使用总结
2014/09/22 PHP
php常用字符串比较函数实例汇总
2014/11/24 PHP
PHP统一页面编码避免乱码问题
2015/04/09 PHP
php中分页及SqlHelper类用法实例
2017/01/12 PHP
JavaScript 判断日期格式是否正确的实现代码
2011/07/04 Javascript
js判断IE浏览器版本过低示例代码
2013/11/22 Javascript
jQuery1.9.1针对checkbox的调整方法(prop)
2014/05/01 Javascript
Jquery与Bootstrap实现后台管理页面增删改查功能示例
2017/01/22 Javascript
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
2017/12/09 Javascript
JavaScript实现计算多边形质心的方法示例
2018/01/31 Javascript
webpack external模块的具体使用
2018/03/10 Javascript
详解element-ui设置下拉选择切换必填和非必填
2019/06/17 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
2020/07/21 Javascript
vue组件开发之tab切换组件使用详解
2020/08/21 Javascript
用js实现放大镜效果
2020/10/28 Javascript
Python深入学习之对象的属性
2014/08/31 Python
python实现带声音的摩斯码翻译实现方法
2015/05/20 Python
Python多线程下载文件的方法
2015/07/10 Python
python实现爬虫下载美女图片
2015/07/14 Python
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
Python单链表简单实现代码
2016/04/27 Python
Python的缺点和劣势分析
2019/11/19 Python
Python3变量与基本数据类型用法实例分析
2020/02/14 Python
python Paramiko使用示例
2020/09/21 Python
Django使用django-simple-captcha做验证码的实现示例
2021/01/07 Python
给老师的检讨书
2014/02/11 职场文书
机关工会开展学习雷锋活动总结
2014/03/01 职场文书
教师师德承诺书
2014/03/26 职场文书
大班幼儿评语大全
2014/04/30 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
综合办公室主任岗位职责
2015/04/01 职场文书
2015年暑期社会实践总结
2015/07/13 职场文书
2016年暑假学生家长评语
2015/12/01 职场文书
Nginx已编译的nginx-添加新模块
2021/04/01 Servers
九大龙王魂骨,山龙王留下躯干骨,榜首死的最憋屈(被捏碎)
2022/03/18 国漫