Python 多執行緒庫總結

2021-08-08 03:52:40 字數 4524 閱讀 8322

下面是一些基礎函式,函式包括: 函式

threading.active_count()

threading.current_thread()

threading.get_ident()

threading.enumerate()

threading.main_thread()

threading.settrace(func)

threading.setprofile(func)

threading.stack_size([size])

threading.timeout_max

threading模組一共提供的類包括:

local、thread、lock、rlock、condition、semaphore、event、time

專門用來管理執行緒區域性的資料,也就是說乙個執行緒會對應乙個local,當前執行緒無法訪問其它執行緒的區域性資料,執行緒設定的屬性也不會被其它執行緒同名的屬性給替換掉。 函式

threading.local

例子如下:

import

threading

class

mythread1

(threading

.thread

):def

run(

self

):local

=threading

.local

()if

'name'

notin

local

.__dict__

:print

('thread1 not set name'

)local

.name

='li'

print

('thread1 {}'

.format

(local

.name

))class

mythread2

(threading

.thread

):def

run(

self

):local

=threading

.local

()if

'name'

notin

local

.__dict__

:print

('thread2 not set name'

)local

.name

='wang'

print

('thread2 {}'

.format

(local

.name

))def

main

():print

("start main threading"

)local

=threading

.local

()local

.name

='main'

threads=[

mythread1

(),mythread2

()]fortin

threads:t

.start

()# 一次讓新建立的執行緒執行 join

fort

inthreads:t

.join

()print

('main {}'

.format

(local

.name

))if

__name__

=='__main__'

:main

()

其最後的輸出結果為:

start main threading

thread1 not set name

thread1 li

thread2 not set name

thread2 wang

main main

函式class threading.thread(group=none, target=none, name=none, args=(), kwargs={}, *, daemon=none)

start()

run()

join(timeout=none)

name

getname()/setname()

ident

is_alive()

daemon

isdaemon()/setdaemon()

執行緒的建立有兩種實現方式,分別是1.通過將乙個可呼叫物件傳遞到建構函式中;2.通過繼承thread,在子類中重寫run方法。thread類定義為:

class

threading

.thread

(group

=none

,target

=none

,name

=none

,args

=(),

kwargs

={},*,

daemon

=none

)# group應為none;保留用於在實現threadgroup類時的未來擴充套件。

# target是將被run()方法呼叫的可呼叫物件。預設為none,表示不呼叫任何東西。

# name是執行緒的名字。預設情況下,以「thread-n」的形式構造乙個唯一的名字,n是乙個小的十進位制整數。

# args是給呼叫目標的引數元組。預設為()。

# kwargs是給呼叫目標的關鍵字引數的乙個字典。預設為{}。

# 如果daemon不是none,守護程式顯式設定執行緒是否為daemonic。如果為none(預設值),daemonic屬性從當前執行緒繼承。

注意:應該始終以關鍵字引數呼叫該建構函式。

為了保證資料的準確性,引入了鎖的概念,原鎖是乙個同步原語,是當前可用的最低階同步原語。 函式

class threading.lock

acquire(blocking=true, timeout=-1)

release()

和lock的區別在於rlock允許在同一執行緒中被多次acquire,但是lock卻不允許這種情況,使用acquire的次數需要和release的次數相互對應; 函式

class threading.lock

acquire(blocking=true, timeout=-1)

release()

條件變數總是與某種鎖相關聯 函式

class threading.condition(lock=none)

acquire(*args)

release()

wait(timeout=none)

wait_for(predicate, timeout=none)

notify(n=1)

notify_all()

訊號量管理內部計數器,每個acquire()呼叫遞減,每個release()呼叫遞增。計數器永遠不會低於零;當acquire()發現它為零時,它阻塞,等待其他執行緒呼叫release()。 函式

class threading.semaphore(value=1)

class threading.boundedsemaphore(value=1)

acquire(blocking=true, timeout=none)

release()

事件物件是執行緒間最簡單的通訊機制之一:執行緒可以啟用在乙個事件物件上等待的其他執行緒。每個事件物件管理乙個內部標誌,可以在事件物件上呼叫set() 方法將內部標誌設為true,呼叫 clear() 方法將內部標誌重置為false。wait()方法將阻塞直至該標誌為真。 函式

class threading.event

is_set()

set()

clear()

wait(timeout=none)

這個類表示乙個動作應該在乙個特定的時間之後執行 — 也就是乙個計時器。timer是thread的子類, 因此也可以使用函式建立自定義執行緒 函式

class threading.timer(interval, function, args=none, kwargs=none)

cancel()

這個類提供了乙個簡單的同步原語,供需要彼此等待的固定數量的執行緒使用。每個執行緒嘗試通過呼叫wait()方法傳遞屏障,並將阻塞,直到所有執行緒都呼叫。

函式和屬性

class threading.barrier(parties, action=none, timeout=none)

wait(timeout=none)

reset()

abort()

parties

n_waiting

broken

exception threading.brokenbarriererror

參考執行緒總結

專案:

實現一實現二

python多執行緒總結

1.定義幾個想在不同執行緒執行的函式 import threading from time import ctime,sleep defmusic a for i in range 2 print listen music s s a,ctime sleep 1 2.建立執行緒池 threads t...

python 多執行緒總結(一)

使用python已經有段時間了,一直想學一下多執行緒程式設計,一直被耽擱,這次好好學習一下,寫篇部落格,作為以後的參考,好記性不如爛筆頭,這句話的理解越來越深刻。參考 python 標準庫 來寫這篇文章的,有不足的地方,大家可以提出。python多執行緒有多種方法,這裡只是寫threading的方法...

python總結(十七) 多執行緒

1 由於任何程序預設就會啟動乙個執行緒,我們把該執行緒稱為主線程,主線程又可以啟動新的執行緒,python的threading模組有個current thread 函式,它永遠返回當前執行緒的例項。主線程例項的名字叫mainthread,子執行緒的名字在建立時指定,我們用loopthread命名子執...