首页 > 编程 > Python > 正文

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

2019-11-25 16:45:03
字体:
来源:转载
供稿:网友

一、概念介绍

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 threadingimport 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 threadingimport 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 datetimeimport osimport threadingdef 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程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表