python实现多线程的方式及多条命令并发执行

 更新时间:2016年06月07日 10:11:07   投稿:lijiao  
这篇文章主要为大家详细介绍了python实现多线程的方式及多条命令并发执行,感兴趣的小伙伴们可以参考一下

一、概念介绍

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中可以发生异常自动重试库retrying

    python中可以发生异常自动重试库retrying

    这篇文章主要介绍了python中可以发生异常自动重试库retrying,retrying是一个极简的使用Python编写的库,主题更多相关内容需要的朋友可以参考一下
    2022-06-06
  • 对Python3.6 IDLE常用快捷键介绍

    对Python3.6 IDLE常用快捷键介绍

    今天小编就为大家分享一篇对Python3.6 IDLE常用快捷键介绍,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • python实现贪吃蛇游戏

    python实现贪吃蛇游戏

    这篇文章主要为大家详细介绍了python实现贪吃蛇游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Python字符串的转义字符

    Python字符串的转义字符

    这篇文章主要介绍了Python字符串的转义字符,转义字符是指,用一些普通字符的组合来代替一些特殊字符,由于其组合改变了原来字符表示的含义,下文相关资料需要的小伙伴可以参考一下
    2022-04-04
  • python绘制双柱形图代码实例

    python绘制双柱形图代码实例

    这篇文章主要介绍了python绘制双柱形图代码实例,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • 实例讲解Python脚本成为Windows中运行的exe文件

    实例讲解Python脚本成为Windows中运行的exe文件

    在本篇文章里小编给大家分享了关于Python脚本成为Windows中运行的exe文件的相关知识点内容,有兴趣的朋友们学习下。
    2019-01-01
  • python使用xlrd模块读写Excel文件的方法

    python使用xlrd模块读写Excel文件的方法

    这篇文章主要介绍了python使用xlrd模块读写Excel文件的方法,较为详细的分析了xlrd模块的安装、使用与操作Excel文件的相关技巧,需要的朋友可以参考下
    2015-05-05
  • django 外键model的互相读取方法

    django 外键model的互相读取方法

    今天小编就为大家分享一篇django 外键model的互相读取方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python实现可自定义大小的截屏功能

    Python实现可自定义大小的截屏功能

    这篇文章主要介绍了Python实现可自定义大小的截屏功能,结合实例形式分析了Python针对指定范围的截图、保存等功能相关实现技巧,需要的朋友可以参考下
    2018-01-01
  • Python中引用传参四种方式介绍

    Python中引用传参四种方式介绍

    大家好,本篇文章主要讲的是Python中引用传参四种方式介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2021-12-12

最新评论