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标准库之随机数 (math包、random包)介绍
Nov 25 Python
Python实现SMTP发送邮件详细教程
Mar 02 Python
Python实现判断并移除列表指定位置元素的方法
Apr 13 Python
Python中矩阵创建和矩阵运算方法
Aug 04 Python
详解django自定义中间件处理
Nov 21 Python
解决python flask中config配置管理的问题
Jul 26 Python
python实现桌面托盘气泡提示
Jul 29 Python
使用python模拟高斯分布例子
Dec 09 Python
tensorflow 实现从checkpoint中获取graph信息
Feb 10 Python
pycharm设置python文件模板信息过程图解
Mar 10 Python
python解释器安装教程的方法步骤
Jul 02 Python
Python操作dict时避免出现KeyError的几种解决方法
Sep 20 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中使用Sockets 从Usenet中获取文件
2008/01/10 PHP
php防注入,表单提交值转义的实现详解
2013/06/10 PHP
解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
2013/07/03 PHP
让codeigniter与swfupload整合的最佳解决方案
2014/06/12 PHP
php基于数组函数实现关联表的编辑操作示例
2017/07/04 PHP
PHP获取当前系统时间的方法小结
2018/10/03 PHP
Yii实现微信公众号场景二维码的方法实例
2020/08/30 PHP
Jquery作者John Resig自己封装的javascript 常用函数
2009/11/09 Javascript
javascript获取当前日期时间及其它操作函数
2011/01/11 Javascript
可恶的ie8提示缺少id未定义
2014/03/20 Javascript
JQuery控制radio选中和不选中方法总结
2015/04/15 Javascript
Bootstrap每天必学之下拉菜单
2015/11/25 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
2016/05/24 Javascript
玩转JavaScript OOP - 类的实现详解
2016/06/08 Javascript
详细分析Javascript中创建对象的四种方式
2016/08/17 Javascript
用JS中split方法实现彩色文字背景效果实例
2016/08/24 Javascript
Javascript设计模式之装饰者模式详解篇
2017/01/17 Javascript
JS 60秒后重新发送验证码的实例讲解
2017/07/26 Javascript
简单实现vue验证码60秒倒计时功能
2017/10/11 Javascript
vue动态配置模板 'component is'代码
2019/07/04 Javascript
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
[53:10]Secret vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
深入讲解Python编程中的字符串
2015/10/14 Python
Python开发网站目录扫描器的实现
2019/02/21 Python
如何通过Python实现标签云算法
2019/07/02 Python
Tensorflow中tf.ConfigProto()的用法详解
2020/02/06 Python
PyTorch: Softmax多分类实战操作
2020/07/07 Python
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
日本钓鱼渔具和户外用品网上商店:naturum
2016/08/07 全球购物
欧舒丹英国官网:购买欧舒丹护手霜等明星产品
2017/01/17 全球购物
英国拖鞋购买网站:Bedroom Athletics
2020/02/28 全球购物
先进事迹报告会感言
2014/01/24 职场文书
教师学习心得体会范文
2016/01/21 职场文书
2019年行政人事个人工作总结范本!
2019/07/19 职场文书
Python+Appium自动化测试的实战
2021/06/30 Python
Python使用MapReduce进行简单的销售统计
2022/04/22 Python