多線程開發+多線程使用共享數據-17
進程:運行著的程序
線程:每個進程裏面至少包含一個線程,線程是操作系統創建的,用來控制代碼執行的數據結構,線程就像代碼的執行許可證
單線程程序,主線程的入口就是代碼的開頭
主線程順序往下執行,直到所有的代碼都執行完
CPU核心,在一個時間點上只能執行一個線程代碼
調度:操作系統不會讓一個線程一直占用CPU的
進程裏的多線程:
線程庫:代碼通過系統調用,請求OS分配一個新的線程
python裏面:thread、threading都可以用來創建和管理線程,thread比較底層,threading是thread模塊的擴展,提供了很多線程同步功能,使用起來更加方便強大
多線程的概念
#coding = utf-8
print (‘main thread start.‘)
import threading
from time import sleep
def thread1_entry():
print (‘child thread 1,strat‘)
sleep(15)
print(‘child thread 1,end‘)
t1 = threading.Thread (target=thread1_entry) #實例化
t1.start() 創建新的線程,這時候才有兩個線程;代碼通過系統調用,請求OS分配一個新的線程,與原來的線程並行的執行一段代碼
sleep(10)
print(‘main thread end.‘)
為什麽需要多線程?
多線程給一個程序並行執行代碼的能力
同時處理多個任務
$convert
>>convert 1.avi
>>convert 2.avi
常見的:UI線程、任務線程 task exeute
例子:主線程等待子線程結束
# coding=utf8
import threading
from time import sleep, ctime獲取當前時間
def thread1_entry(nsec):
print(‘child thread 1, start at:‘, ctime())
sleep(nsec)
print(‘child thread 1, end at:‘, ctime())
def thread2_entry(nsec):
print(‘child thread 2, start at:‘, ctime())
sleep(nsec)
print(‘child thread 2, end at:‘, ctime())
if __name__==‘__main__‘:
print(‘main thread start.‘)
# 創建線程對象, 指定了新線程的入口函數
t1 = threading.Thread(target=thread1_entry, args=(1,))
t2 = threading.Thread(target=thread2_entry, args=(2,))
# 啟動新線程
t1.start()
t2.start()
# 等t1 線程結束
t1.join()
# 等t2 線程結束
t2.join()
print(‘main thread end.‘)
多線程開發+多線程使用共享數據-17