一、線程
第一個線程
基本使用
Threading用于提供線程相關的操作,線程是應用程式中工作的最小單元。
更多方法:
start 線程準備就緒,等待CPU排程
setName 為線程設定名稱
getName 擷取線程名稱
setDaemon 設定為背景線程或前台線程(預設)
如果是背景線程,主線程執行過程中,背景線程也在進行,主線程執行完畢後,背景線程不論成功與否,均停止
如果是前台線程,主線程執行過程中,前台線程也在進行,主線程執行完畢後,等待前台線程也執行完成後,程式停止
join 逐個執行每個線程,執行完畢後繼續往下執行,該方法使得多線程變得無意義
run 線程被cpu排程後自動執行線程對象的run方法
自定義線程
線程鎖
信号量(Semaphore)
互斥鎖 同時隻允許一個線程更改資料,而Semaphore是同時允許一定數量的線程更改資料 ,比如廁所有3個坑,那最多隻允許3個人上廁所,後面的人隻能等裡面有人出來了才能再進去。
自定義線程池
信号量
事件(event)
python線程的事件用于主線程控制其他線程的執行,事件主要提供了三個方法 set、wait、clear。
事件處理的機制:全局定義了一個“Flag”,如果“Flag”值為 False,那麼當程式執行 event.wait 方法時就會阻塞,如果“Flag”值為True,那麼event.wait 方法時便不再阻塞。
clear:将“Flag”設定為False
set:将“Flag”設定為True
Timer
定時器,指定n秒後執行某操作
生産者消費者模型(隊列)
二、程序
預設資料不共享,可以使用下面的三種方法進行程序資料共享
queues
array
Manager.dict
程序池
PS:
IO密集型-多線程
計算密集型 - 多程序
三、協程
原理:利用一個線程,分解一個線程成為多個“微線程”==》程式級别
greenlet
gevent安裝:
pip3 install gevent