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内置的字符串处理函数整理
Jan 29 Python
Python简单连接MongoDB数据库的方法
Mar 15 Python
python如何为被装饰的函数保留元数据
Mar 21 Python
对python列表里的字典元素去重方法详解
Jan 21 Python
python变量命名的7条建议
Jul 04 Python
ERLANG和PYTHON互通实现过程详解
Jul 05 Python
python读写csv文件实例代码
Jul 05 Python
python3中numpy函数tile的用法详解
Dec 04 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
Feb 11 Python
tensorflow 动态获取 BatchSzie 的大小实例
Jun 30 Python
python如何求圆的面积
Jul 01 Python
记一次django内存异常排查及解决方法
Aug 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
通过5个php实例细致说明传值与传引用的区别
2012/08/08 PHP
探讨Smarty中如何获取数组的长度以及smarty调用php函数的详解
2013/06/20 PHP
PHP中魔术变量__METHOD__与__FUNCTION__的区别
2014/09/29 PHP
PHP最常用的正则表达式
2017/02/13 PHP
PHP中error_reporting函数用法详细介绍
2017/06/11 PHP
PHP连接及操作PostgreSQL数据库的方法详解
2019/01/30 PHP
如何在PHP中使用数组
2020/06/09 PHP
用正则xmlHttp实现的偷(转)
2007/01/22 Javascript
JavaScript 对话框和状态栏使用说明
2009/10/25 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
2012/04/16 Javascript
基于JQuery的一句话搞定手风琴菜单
2012/09/14 Javascript
jquery移除button的inline onclick事件(已测试及兼容浏览器)
2013/01/25 Javascript
如何在Angular2中使用jQuery及其插件的方法
2017/02/09 Javascript
jQuery.Ajax()的data参数类型详解
2017/07/23 jQuery
jquery 实现拖动文件上传加载进度条功能
2018/03/18 jQuery
Angular项目如何升级至Angular6步骤全纪录
2018/09/03 Javascript
ligerUI的ligerDialog关闭刷新的方法
2019/09/27 Javascript
VueX模块的具体使用(小白教程)
2020/06/05 Javascript
Element-ui upload上传文件限制的解决方法
2021/01/22 Javascript
python通过文件头判断文件类型
2015/10/30 Python
EM算法的python实现的方法步骤
2018/01/02 Python
python获取酷狗音乐top500的下载地址 MP3格式
2018/04/17 Python
python flask实现分页的示例代码
2018/08/02 Python
python3 实现对图片进行局部切割的方法
2018/12/05 Python
python检测服务器端口代码实例
2019/08/31 Python
详解有关PyCharm安装库失败的问题的解决方法
2020/02/02 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
Python 制作查询商品历史价格的小工具
2020/10/20 Python
台湾乐天市场:日本No.1的网路购物网站
2017/03/22 全球购物
食品行业求职人的自我评价
2014/01/19 职场文书
公司年底活动方案
2014/08/17 职场文书
培训学校2015年度工作总结
2015/07/20 职场文书
2016基督教会圣诞节开幕词
2016/03/04 职场文书
高中16字霸气押韵班级口号集锦!
2019/06/27 职场文书
奖学金申请书(范文)
2019/08/14 职场文书
叶县这家生产军用电台的兵工厂,人称“四机部”,走出一上将
2022/02/18 无线电