本文主要學習的執行緒模組是在python3.7版本環境中的threading模組,不涉及另外的乙個執行緒模組 _thread。
執行緒模組中的屬性和方法:
import threading
dir(threading) # 下面列表為返回資料
['barrier', 'boundedsemaphore', 'brokenbarriererror', 'condition', 'event', 'lock', 'rlock', 'semaphore', 'timeout_max', 'thread', 'threaderror', 'timer', 'weakset', '_crlock', '_dummythread', '_mainthread', '_pyrlock', '_rlock', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_active', '_active_limbo_lock', '_after_fork', '_allocate_lock', '_count', '_counter', '_dangling', '_deque', '_enumerate', '_format_exc', '_islice', '_limbo', '_main_thread', '_newname', '_os', '_picksomenondaemonthread', '_profile_hook', '_set_sentinel', '_shutdown', '_start_new_thread', '_sys', '_time', '_trace_hook', 'activecount', 'active_count', 'currentthread', 'current_thread', 'enumerate', 'get_ident', 'local', 'main_thread', 'setprofile', 'settrace', 'stack_size']
常用類:
threading.thread
常用方法:
threading.enumerate()
返回乙個包含正在執行的執行緒的列表(主線程和子執行緒),正在執行指執行緒啟動後、結束前,不包括啟動前和終止後的執行緒。
threading.thread類中方法
run方法:執行緒啟動後,自動執行該方法
類例項方法:
start:開啟執行緒
join:等待執行緒結束
執行緒建立所用類為threading.thread,有兩種方法:1、直接建立,2、建立新類,繼承threading.thread類,重寫run方法
**實現1,直接建立執行緒
import threading
import time
def t1(t):
for i in t:
print(i)
time.sleep(1)
def t2(t):
for i in t:
print(i)
time.sleep(1)
def main():
t11 = threading.thread(target=t1, args=([1, 2, 3],))
t22 = threading.thread(target=t2, args=([4, 5, 6],))
#print(id(t11))
#print(id(t22))
t11.start()
t22.start()
while true:
print(threading.enumerate())
if len(threading.enumerate()) <= 1:
break
time.sleep(0.5)
if __name__ == '__main__':
main()
可以發現,t11和t22兩個執行緒是同時執行(併發)的,多次執行後 發現:cpu交替執行兩個執行緒,二者的先後順序是不確定(隨機)的,多執行緒可以共享全域性變數。
**實現2,類繼承與方法重寫
import threading, time
ct = 1
class t(threading.thread):
def __init__(self):
super().__init__()
def run(self):
global ct
for i in range(3):
ct = ct+1
time.sleep(0.5)
print(ct)
if __name__ == '__main__':
t = t()
t.start()
t.join()
print('end.')
從上面**可以看到,join方法會等待子執行緒結束,再執行主線程的print方法,所以join方法可以在一定程度上 使**順序執行。
這裡的執行順序指的是 主線程和子執行緒的執行順序。
通常情況下,主線程會等待子執行緒執行,當所有子執行緒結束後,主線程才會繼續後面的操作 直到結束,也可以人為改變這個順序,即主線程無需等待子執行緒結束,實現的方法是 設定守護執行緒。
def demo():
for i in range(3):
print("hello world")
time.sleep(1)
if __name__ == '__main__':
t = threading.thread(target=demo)
# 守護執行緒,不會等子執行緒結束
t.setdaemon(true)
t.start()
print('end.')
python 多執行緒程式設計
一 執行緒基礎 1 建立執行緒 thread模組提供了start new thread函式,用以建立執行緒。start new thread函式成功建立後還可以對其進行操作。其函式原型 start new thread function,atgs kwargs 其引數含義如下 args 元組形式的引...
python 多執行緒程式設計
一 執行緒基礎 1 建立執行緒 thread模組提供了start new thread函式,用以建立執行緒。start new thread函式成功建立後還能夠對其進行操作。其函式原型 start new thread function,atgs kwargs 其引數含義例如以下 args 元組形式...
Python多執行緒程式設計
import threading import time deffunc name time.sleep 3 print 子執行緒 s 啟動 threading.current thread name print hello name print 子執行緒 s 結束 threading.curren...