新聞中心
多線程(英語:multithreading),是指從軟件或者硬件上實現(xiàn)多個線程并發(fā)執(zhí)行的技術。具有多線程能力的計算機因有硬件支持而能夠在同一時間執(zhí)行多于一個線程,進而提升整體處理性能。具有這種能力的系統(tǒng)包括對稱多處理機、多核心處理器以及芯片級多處理(Chip-level multithreading)或同時多線程(Simultaneous multithreading)處理器。在一個程序中,這些獨立運行的程序片段叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理(Multithreading)”。具有多線程能力的計算機因有硬件支持而能夠在同一時間執(zhí)行多于一個線程(臺灣譯作“執(zhí)行緒”),進而提升整體處理性能。

為雞澤等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及雞澤網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為成都網(wǎng)站設計、網(wǎng)站制作、外貿(mào)營銷網(wǎng)站建設、雞澤網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
python 多線程之使用方法
Python 提供多線程編程的模塊有以下幾個:
- _thread
- threading
- Queue
- multiprocessing
下面一一介紹:
1. _thread 模塊提供了低級別的基本功能來支持多線程功能,提供簡單的鎖來確保同步,推薦使用 threading 模塊。
2. threading 模塊對 _thread 進行了封裝,提供了更高級別,功能更強,更易于使用的線程管理的功能,對線程的支持更為完善,絕大多數(shù)情況下,只需要使用 threading 這個高級模塊就夠了。
相關推薦:《Python教程》
使用 threading 進行多線程操作:
方法一:是創(chuàng)建 threading.Thread 實例,調(diào)用其 start() 方法。
import time
import threading
def task_thread(counter):
print(f'線程名稱:{threading.current_thread().name} 參數(shù):{counter} 開始時間:{time.strftime("%Y-%m-%d
%H:%M:%S")}')
num = counter
while num:
time.sleep(3)
num -= 1
print(f'線程名稱:{threading.current_thread().name} 參數(shù):{counter} 結束時間:{time.strftime("%Y-%m-%d
%H:%M:%S")}')
if __name__ == '__main__':
print(f'主線程開始時間:{time.strftime("%Y-%m-%d %H:%M:%S")}')
#初始化3個線程,傳遞不同的參數(shù)
t1 = threading.Thread(target=task_thread, args=(3,))
t2 = threading.Thread(target=task_thread, args=(2,))
t3 = threading.Thread(target=task_thread, args=(1,))
#開啟三個線程
t1.start()
t2.start()
t3.start()
#等待運行結束
t1.join()
t2.join()
t3.join()
print(f'主線程結束時間:{time.strftime("%Y-%m-%d %H:%M:%S")}')運行結果如下所示:
主線程開始時間:2018-07-06 23:03:46 線程名稱:Thread-1 參數(shù):3 開始時間:2018-07-06 23:03:46 線程名稱:Thread-2 參數(shù):2 開始時間:2018-07-06 23:03:46 線程名稱:Thread-3 參數(shù):1 開始時間:2018-07-06 23:03:46 線程名稱:Thread-3 參數(shù):1 結束時間:2018-07-06 23:03:49 線程名稱:Thread-2 參數(shù):2 結束時間:2018-07-06 23:03:52 線程名稱:Thread-1 參數(shù):3 結束時間:2018-07-06 23:03:55 主線程結束時間:2018-07-06 23:03:55
方法二:繼承 Thread 類,在子類中重寫 run() 和 init() 方法。
import time
import threading
class MyThread(threading.Thread):
def __init__(self, counter):
super().__init__()
self.counter = counter
def run(self):
print(
f'線程名稱:{threading.current_thread().name} 參數(shù):{self.counter} 開始時間:{time.strftime
("%Y-%m-%d %H:%M:%S")}'
)
counter = self.counter
while counter:
time.sleep(3)
counter -= 1
print(
f'線程名稱:{threading.current_thread().name} 參數(shù):{self.counter} 結束時間:{time.strftime
("%Y-%m-%d %H:%M:%S")}'
)
if __name__ == "__main__":
print(f'主線程開始時間:{time.strftime("%Y-%m-%d %H:%M:%S")}')
# 初始化3個線程,傳遞不同的參數(shù)
t1 = MyThread(3)
t2 = MyThread(2)
t3 = MyThread(1)
# 開啟三個線程
t1.start()
t2.start()
t3.start()
# 等待運行結束
t1.join()
t2.join()
t3.join()
print(f'主線程結束時間:{time.strftime("%Y-%m-%d %H:%M:%S")}')運行結果如下,與方法一的運行結果一致。
主線程開始時間:2018-07-06 23:34:16 線程名稱:Thread-1 參數(shù):3 開始時間:2018-07-06 23:34:16 線程名稱:Thread-2 參數(shù):2 開始時間:2018-07-06 23:34:16 線程名稱:Thread-3 參數(shù):1 開始時間:2018-07-06 23:34:16 線程名稱:Thread-3 參數(shù):1 結束時間:2018-07-06 23:34:19 線程名稱:Thread-2 參數(shù):2 結束時間:2018-07-06 23:34:22 線程名稱:Thread-1 參數(shù):3 結束時間:2018-07-06 23:34:25 主線程結束時間:2018-07-06 23:34:25
如果繼承 Thread 類,想調(diào)用外部傳入函數(shù),代碼如下所示:
import time
import threading
def task_thread(counter):
print(f'線程名稱:{threading.current_thread().name} 參數(shù):{counter} 開始時間:{time.strftime("%Y-%m-%d
%H:%M:%S")}')
num = counter
while num:
time.sleep(3)
num -= 1
print(f'線程名稱:{threading.current_thread().name} 參數(shù):{counter} 結束時間:{time.strftime("%Y-%m-%d
%H:%M:%S")}')
class MyThread(threading.Thread):
def __init__(self, target, args):
super().__init__()
self.target = target
self.args = args
def run(self):
self.target(*self.args)
if __name__ == "__main__":
print(f'主線程開始時間:{time.strftime("%Y-%m-%d %H:%M:%S")}')
# 初始化3個線程,傳遞不同的參數(shù)
t1 = MyThread(target=task_thread,args=(3,))
t2 = MyThread(target=task_thread,args=(2,))
t3 = MyThread(target=task_thread,args=(1,))
# 開啟三個線程
t1.start()
t2.start()
t3.start()
# 等待運行結束
t1.join()
t2.join()
t3.join()
print(f'主線程結束時間:{time.strftime("%Y-%m-%d %H:%M:%S")}')這樣就和方法一是相通的,實例化自定義的線程類,運行結果不變。
網(wǎng)站標題:創(chuàng)新互聯(lián)Python教程:python如何使用多線程
本文路徑:http://m.fisionsoft.com.cn/article/dhocjgc.html


咨詢
建站咨詢
