当前位置:   article > 正文

python: 多线程实现的两种方式及让多条命令并发执行_python同时执行多条at指令

python同时执行多条at指令

1. 概念介绍

        Thread 是threading模块中最重要的类之一,可以使用它来创建线程。有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法;另一种是创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入.

        Thread模块是比较底层的模块,Threading模块是对Thread做了一些包装的,可以更加方便的被使用。

        另外在工作时,有时需要让多条命令并发的执行, 而不是顺序执行.

        有关线程的详细介绍,请参考官方文档 https://docs.python.org/2/library/threading.html

2. 代码样例

  1. #!/usr/bin/python
  2. # encoding=utf-8
  3. # Filename: thread-extends-class.py
  4. # 直接从Thread继承,创建一个新的class,把线程执行的代码放到这个新的 class里
  5. import threading
  6. import time
  7. class ThreadImpl(threading.Thread):
  8. def __init__(self, num):
  9. threading.Thread.__init__(self)
  10. self._num = num
  11. def run(self):
  12. global total, mutex
  13. # 打印线程名
  14. print threading.currentThread().getName()
  15. for x in xrange(0, int(self._num)):
  16. # 取得锁
  17. mutex.acquire()
  18. total = total + 1
  19. # 释放锁
  20. mutex.release()
  21. if __name__ == '__main__':
  22. #定义全局变量
  23. global total, mutex
  24. total = 0
  25. # 创建锁
  26. mutex = threading.Lock()
  27. #定义线程池
  28. threads = []
  29. # 创建线程对象
  30. for x in xrange(0, 40):
  31. threads.append(ThreadImpl(100))
  32. # 启动线程
  33. for t in threads:
  34. t.start()
  35. # 等待子线程结束
  36. for t in threads:
  37. t.join()
  38. # 打印执行结果
  39. print total
  1. #!/usr/bin/python
  2. # encoding=utf-8
  3. # Filename: thread-function.py
  4. # 创建线程要执行的函数,把这个函数传递进Thread对象里,让它来执行
  5. import threading
  6. import time
  7. def threadFunc(num):
  8. global total, mutex
  9. # 打印线程名
  10. print threading.currentThread().getName()
  11. for x in xrange(0, int(num)):
  12. # 取得锁
  13. mutex.acquire()
  14. total = total + 1
  15. # 释放锁
  16. mutex.release()
  17. def main(num):
  18. #定义全局变量
  19. global total, mutex
  20. total = 0
  21. # 创建锁
  22. mutex = threading.Lock()
  23. #定义线程池
  24. threads = []
  25. # 先创建线程对象
  26. for x in xrange(0, num):
  27. threads.append(threading.Thread(target=threadFunc, args=(100,)))
  28. # 启动所有线程
  29. for t in threads:
  30. t.start()
  31. # 主线程中等待所有子线程退出
  32. for t in threads:
  33. t.join()
  34. # 打印执行结果
  35. print total
  36. if __name__ == '__main__':
  37. # 创建40个线程
  38. main(40)
  1. #!/usr/bin/python
  2. # encoding=utf-8
  3. # Filename: put_files_hdfs.py
  4. # 让多条命令并发执行,如让多条scp,ftp,hdfs上传命令并发执行,提高程序运行效率
  5. import datetime
  6. import os
  7. import threading
  8. def execCmd(cmd):
  9. try:
  10. print "命令%s开始运行%s" % (cmd,datetime.datetime.now())
  11. os.system(cmd)
  12. print "命令%s结束运行%s" % (cmd,datetime.datetime.now())
  13. except Exception, e:
  14. print '%s\t 运行失败,失败原因\r\n%s' % (cmd,e)
  15. if __name__ == '__main__':
  16. # 需要执行的命令列表
  17. cmds = ['ls /root',
  18. 'pwd',]
  19. #线程池
  20. threads = []
  21. print "程序开始运行%s" % datetime.datetime.now()
  22. for cmd in cmds:
  23. th = threading.Thread(target=execCmd, args=(cmd,))
  24. th.start()
  25. threads.append(th)
  26. # 等待线程运行完毕
  27. for th in threads:
  28. th.join()
  29. print "程序结束运行%s" % datetime.datetime.now()
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/74780
推荐阅读
相关标签
  

闽ICP备14008679号