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写的ARP攻击代码实例
Jun 04 Python
Python 专题六 局部变量、全局变量global、导入模块变量
Mar 20 Python
python3 图片referer防盗链的实现方法
Mar 12 Python
Python 3.x基于Xml数据的Http请求方法
Dec 28 Python
12个步骤教你理解Python装饰器
Jul 01 Python
Django 简单实现分页与搜索功能的示例代码
Nov 07 Python
使用Python的networkx绘制精美网络图教程
Nov 21 Python
Pytorch之finetune使用详解
Jan 18 Python
python 基于opencv 绘制图像轮廓
Dec 11 Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
Feb 18 Python
浅析Python模块之间的相互引用问题
Feb 26 Python
Python如何把不同类型数据的json序列化
Apr 30 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生成验证码时“图像因其本身有错无法显示”的解决方法
2013/08/07 PHP
PHP和MYSQL实现分页导航思路详解
2017/04/11 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
jquery isType() 类型判断代码
2011/02/14 Javascript
让人印象深刻的10个jQuery手风琴效果应用
2012/05/08 Javascript
js变换显示图片的实例
2013/04/16 Javascript
Javascript:为input设置readOnly属性(示例讲解)
2013/12/25 Javascript
影响jQuery使用的14个方面
2014/09/01 Javascript
Python脚本后台运行的几种方式
2015/03/09 Javascript
简单实现js悬浮导航效果
2017/02/05 Javascript
详解Angular2 关于*ngFor 嵌套循环
2017/05/22 Javascript
解决淘宝cnpm 安装后cnpm不是内部或外部命令的问题
2018/05/17 Javascript
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
2019/01/18 Javascript
json数据格式常见操作示例
2019/06/13 Javascript
Vue学习之组件用法实例详解
2020/01/06 Javascript
python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
2014/02/24 Python
python追加元素到列表的方法
2015/07/28 Python
浅谈python对象数据的读写权限
2016/09/12 Python
Python中关于Sequence切片的下标问题详解
2017/06/15 Python
python基础教程项目三之万能的XML
2018/04/02 Python
python实现人人自动回复、抢沙发功能
2018/06/08 Python
Python从文件中读取数据的方法讲解
2019/02/14 Python
python3使用print打印带颜色的字符串代码实例
2019/08/22 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
2019/10/17 Python
基于Python的OCR实现示例
2020/04/03 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
详解HTML5中的拖放事件(Drag 和 drop)
2016/11/14 HTML / CSS
浅析HTML5 meta viewport参数
2020/10/28 HTML / CSS
励志演讲稿范文
2014/04/29 职场文书
阅兵口号
2014/06/19 职场文书
动物科学专业求职信
2014/07/27 职场文书
中考百日冲刺决心书
2015/09/22 职场文书
宣传部部长竞选稿
2015/11/21 职场文书
利用Sharding-Jdbc进行分库分表的操作代码
2022/01/22 Java/Android