天天看點

線程、程序、協程

一、線程

第一個線程

基本使用

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