一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python實現多線程的方式及多條命令并發執行

python實現多線程的方式及多條命令并發執行

2020-08-26 09:31Python教程網 Python

這篇文章主要為大家詳細介紹了python實現多線程的方式及多條命令并發執行,感興趣的小伙伴們可以參考一下

一、概念介紹

Thread 是threading模塊中最重要的類之一,可以使用它來創建線程。有兩種方式來創建線程:一種是通過繼承Thread類,重寫它的run方法;另一種是創建一個threading.Thread對象,在它的初始化函數(__init__)中將可調用對象作為參數傳入.
Thread模塊是比較底層的模塊,Threading模塊是對Thread做了一些包裝的,可以更加方便的被使用。
另外在工作時,有時需要讓多條命令并發的執行, 而不是順序執行。

二、代碼樣例

?
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程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 俺来操| 精品一久久香蕉国产线看播放 | 驯服有夫之妇HD中字日本 | 五月色天在线视频综合观看 | 欧美视频在线一区二区三区 | haodiaose在线精品免费视频 | 色一情一区二区三区四区 | 国语刺激对白勾搭视频在线观看 | 国产一卡2卡3卡四卡高清 | 黄动漫车车好快的车车双女主 | 国产在线极品 | 日本三级s级在线播放 | 四神集团1涨奶是第几章 | 亚洲 日韩 国产 制服 在线 | 亚洲激情婷婷 | 国产综合亚洲专区在线 | 极品久久 | 天天色踪合合 | 精品一区二区国语对白 | 沟厕okn系列在线播放 | 国产精品久久久免费视频 | 亚洲精品国产一区二区三区在 | 美日韩在线观看 | 亚州在线播放 | 国产精品成人网红女主播 | 欧美成人精品福利网站 | 久久精品亚洲牛牛影视 | 亚洲系列第一页 | 国产资源在线视频 | 女同学高中你下面好紧 | 精品国产综合区久久久久久 | www.色香蕉| 精品免费国产一区二区三区 | 高贵女王调奴vk | 牛牛影院成人免费网页 | 息与子中文字幕完整在线 | 天堂在线免费观看 | 好大好猛好爽好深视频免费 | 国产专区视频在线观看 | 精品综合一区二区三区 | 暖暖日本在线观看免费 |