下面是一些基礎函式,函式包括: 函式
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
例子如下:
importthreading
class
mythread1
(threading
.thread
):def
run(
self
):local
=threading
.local
()if
'name'
notin
local
.__dict__
('thread1 not set name'
)local
.name
='li'
('thread1 {}'
.format
(local
.name
))class
mythread2
(threading
.thread
):def
run(
self
):local
=threading
.local
()if
'name'
notin
local
.__dict__
('thread2 not set name'
)local
.name
='wang'
('thread2 {}'
.format
(local
.name
))def
main
("start main threading"
)local
=threading
.local
()local
.name
='main'
threads=[
mythread1
(),mythread2
()]fortin
threads:t
.start
()# 一次讓新建立的執行緒執行 join
fort
inthreads:t
.join
('main {}'
.format
(local
.name
))if
__name__
=='__main__'
:main
()
其最後的輸出結果為:
start main threadingthread1 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類定義為:
classthreading
.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命名子執...