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 23 Python
numpy找出array中的最大值,最小值实例
Apr 03 Python
33个Python爬虫项目实战(推荐)
Jul 08 Python
python通过http下载文件的方法详解
Jul 26 Python
使用matplotlib绘制图例标签中带有公式的图
Dec 13 Python
Python实现图像去噪方式(中值去噪和均值去噪)
Dec 18 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
Feb 10 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
Apr 11 Python
Python模拟登入的N种方式(建议收藏)
May 31 Python
自学python用什么系统好
Jun 23 Python
Python操作Elasticsearch处理timeout超时
Jul 17 Python
详解python with 上下文管理器
Sep 02 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代码实现页面伪静态的方法
2015/07/25 PHP
php的api数据接口书写实例(推荐)
2016/09/22 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
刷新时清空文本框内容的js代码
2007/04/23 Javascript
基于jquery的一个拖拽到指定区域内的效果
2011/09/21 Javascript
JS中使用sort结合localeCompare实现中文排序实例
2014/07/23 Javascript
js/jquery判断浏览器的方法小结
2014/09/02 Javascript
jquery操作对象数组元素方法详解
2014/11/26 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
深入浅析AngularJS和DataModel
2016/02/16 Javascript
JavaScript表单焦点自动切换代码
2016/07/24 Javascript
使用命令行工具npm新创建一个vue项目的方法
2017/12/27 Javascript
node打造微信个人号机器人的方法示例
2018/04/26 Javascript
Koa从零搭建到Api实现项目的搭建方法
2019/07/30 Javascript
如何解决vue在ios微信"复制链接"功能问题
2020/03/26 Javascript
[01:03:59]2018DOTA2亚洲邀请赛3月30日 小组赛B组VGJ.T VS Secret
2018/03/31 DOTA
Python操作mysql数据库实现增删查改功能的方法
2018/01/15 Python
Django使用httpresponse返回用户头像实例代码
2018/01/26 Python
pip install urllib2不能安装的解决方法
2018/06/12 Python
浅析PEP572: 海象运算符
2019/10/15 Python
wxPython实现整点报时
2019/11/18 Python
python使用pip安装SciPy、SymPy、matplotlib教程
2019/11/20 Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
2020/09/28 Python
英国和世界各地预订便宜的酒店:LateRooms.com
2019/05/05 全球购物
铭立家具面试题
2012/12/06 面试题
linux比较文件内容的命令是什么
2013/03/04 面试题
过程装备与控制工程专业个人的求职信
2013/12/01 职场文书
《走一步再走一步》教学反思
2014/02/15 职场文书
2015年公务员个人工作总结
2015/04/24 职场文书
2015年禁毒工作总结
2015/04/30 职场文书
中秋节主题班会
2015/08/14 职场文书
护士爱岗敬业心得体会
2016/01/25 职场文书
多属性、多分类MySQL模式设计
2021/04/05 MySQL
在redisCluster中模糊获取key方式
2021/07/09 Redis
Spring Boot 实现 WebSocket
2022/04/30 Java/Android
使用Redis实现分布式锁的方法
2022/06/16 Redis