9.9 線程理論 1、什麼是線程 線程指的是一條流水線的工作過程 進程根本就不是一個執行單位,進程其實是一個資源單位,一個進程內自帶一個線程,線程才是執行單位 2、進程VS線程 同一進程內的線程們共用該進程內資源,不同進程內的線程資源肯定是隔離的 創建線程的開銷比創建進程要小的多 同一進程內的線程們 ...
9.9 線程理論
1、什麼是線程 線程指的是一條流水線的工作過程
進程根本就不是一個執行單位,進程其實是一個資源單位,一個進程內自帶一個線程,線程才是執行單位
2、進程VS線程
-
同一進程內的線程們共用該進程內資源,不同進程內的線程資源肯定是隔離的
-
創建線程的開銷比創建進程要小的多
9.91 開啟線程的兩種方式
方式一:
from multiprocessing import Process from threading import Thread import time def task(name): print('%s is running' %name) time.sleep(3)#主線程運行結束,要等子線程結束,因為子線程還要使用主線程的資源 if __name__ == '__main__': t=Thread(target=task,args=('egon',)) # t=Process(target=task,args=('egon',)) t.start() print('主線程')#egon is running 主線程
方式二:
from multiprocessing import Process from threading import Thread import time class MyThread(Thread): def run(self): print('%s is running' %self.name) time.sleep(3) if __name__ == '__main__': t=MyThread() t.start() print('主線程')#Thread-1 is running 主線程
9.92 進程與線程的區別
1、PID:
from threading import Thread import time,os def task(): print('%s is running' %os.getpid())#11352 is running time.sleep(3) if __name__ == '__main__': t=Thread(target=task,) t.start() print('主線程',os.getpid())#主線程 11352
2、線程創建開銷小
3、同一進程內的多個線程共用該進程內的資源
from threading import Thread import time,os x=1000 def task(): global x x=0 if __name__ == '__main__': t=Thread(target=task,) t.start() t.join() print('主線程',x) #主線程 0
9.93 線程對象的其他方法
-
is_alive(): 返回線程是否活動的
-
getName(): 返回線程名
-
setName(): 設置線程名
-
enumerate(): 返回一個包含正在運行的線程的list。正在運行指線程啟動後、結束前,不包括啟動前和終止後的線程。
-
active_count(): 返回正在運行的線程數量,與len(threading.enumerate())有相同的結果。
-
current_thread(): 返回當前的線程變數
from threading import Thread,current_thread,active_count,enumerate import time,os def task(): print('%s is running' %current_thread().name) time.sleep(3) if __name__ == '__main__': t1=Thread(target=task,name='第一個線程')#第一個線程 is running t2=Thread(target=task,)#Thread-1 is running t3=Thread(target=task,)#Thread-2 is running t1.start() t2.start() t3.start() print(t1.is_alive())#True print(active_count())#4 print(enumerate())#[<_MainThread(MainThread, started 13004)>, <Thread(第一個線程, started 14044)>, <Thread(Thread-1, started 11380)>, <Thread(Thread-2, started 9452)>] print('主線程',current_thread().name)#主線程 MainThread