gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章python实现多线程的方式及多条命令并发执行由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

1、概念介绍 。

Thread 是threading模块中最重要的类之一,可以使用它来创建线程。有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法;另一种是创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入. Thread模块是比较底层的模块,Threading模块是对Thread做了一些包装的,可以更加方便的被使用。 另外在工作时,有时需要让多条命令并发的执行, 而不是顺序执行.

2、代码样例 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/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

  。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/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 )
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/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实现多线程的方式及多条命令并发执行的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com