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 25 Python
简介Python的collections模块中defaultdict类型的用法
Jul 07 Python
高效测试用例组织算法pairwise之Python实现方法
Jul 19 Python
Python3中的列表,元组,字典,字符串相关知识小结
Nov 10 Python
Python标准模块--ContextManager上下文管理器的具体用法
Nov 27 Python
Python决策树分类算法学习
Dec 22 Python
python 动态生成变量名以及动态获取变量的变量名方法
Jan 20 Python
Python实现AI换脸功能
Apr 10 Python
Matlab中plot基本用法的具体使用
Jul 17 Python
详解Django的MVT设计模式
Apr 29 Python
python实现股票历史数据可视化分析案例
Jun 10 Python
讲解Python实例练习逆序输出字符串
May 06 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实现多级树型菜单
2006/10/09 PHP
ThinkPHP实现跨模块调用操作方法概述
2014/06/20 PHP
php实现从上传文件创建缩略图的方法
2015/04/02 PHP
php中关于socket的系列函数总结
2015/05/18 PHP
php cli模式下获取参数的方法
2017/05/05 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
JavaScript的Function详细
2006/11/14 Javascript
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
如何用JavaScript动态呼叫函数(两种方式)
2013/05/03 Javascript
jquery实现智能感知连接外网搜索
2013/05/21 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
js关于精确计算和数值格式化以及直接引js文件
2014/01/28 Javascript
JavaScript调试技巧之console.log()详解
2014/03/19 Javascript
jquery实现简易的移动端验证表单
2015/11/08 Javascript
js实现文字闪烁特效的方法
2015/12/17 Javascript
原生javascript 学习之js变量全面了解
2016/07/14 Javascript
Bootstrap Modal对话框如何在关闭时触发事件
2016/12/02 Javascript
超级简易的JS计算器实例讲解(实现加减乘除)
2017/08/08 Javascript
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
Python解析树及树的遍历
2016/02/03 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
2017/10/01 Python
Python pip 安装与使用(安装、更新、删除)
2019/10/06 Python
Python多线程模块Threading用法示例小结
2019/11/09 Python
python的scipy实现插值的示例代码
2019/11/12 Python
利用python实现PSO算法优化二元函数
2019/11/13 Python
解决Python在导入文件时的FileNotFoundError问题
2020/04/10 Python
简单了解python shutil模块原理及使用方法
2020/04/28 Python
基于OpenCV的网络实时视频流传输的实现
2020/11/15 Python
在 Python 中使用 7zip 备份文件的操作
2020/12/11 Python
体育教师工作总结的自我评价
2013/10/10 职场文书
三年级学生评语
2014/04/23 职场文书
小学生春游活动方案
2014/08/20 职场文书
用python画城市轮播地图
2021/05/28 Python
pytorch 如何使用batch训练lstm网络
2021/05/28 Python
redis客户端实现高可用读写分离的方式详解
2021/07/04 Redis
JS实现简单九宫格抽奖
2022/06/28 Javascript