程序建立
multi process ing
import multiprocessing
程序物件 = multiprocessing.process(target=子程序**入口,
args=
(位置引數,..
.), kwargs=
, name=
"子程序名"
, daemon=
true
)程序物件.start(
)程序物件.join(
)# 程序物件.terminate()
執行緒建立
import threading
執行緒物件 = threading.thread(target=子執行緒**入口,
args=
(位置引數,..
.), kwargs=
, name=
"子執行緒名"
, daemon=
true
)執行緒物件.start(
)執行緒物件.join(
)
多程序多執行緒執行順序都是 無序的。
程序間不共享全域性資源,同乙個程序內部多個執行緒共享全域性資源。
資源競爭(共享; 訪問無限制)
互斥鎖的作用(保證任意時刻只有乙個執行緒能夠占有鎖 從而解決資源競爭)
使用
建立 互斥鎖物件 = threading.lock()
加鎖 互斥鎖物件.acquire() # 如果已經被別人鎖住 將會一直阻塞等待
解鎖 互斥鎖物件.release()
優缺點 解決資源競爭 保證結果執行正確
降低多工執行效率
容易造成死鎖
daemon 程序含義
when a process exits, it attempts to terminate all of its daemonic child processes.當乙個主程序退出時候 他講會嘗試終止所有的 daemon 子程序(非 daemon 子程序還可以繼續執行知道完成)
daemon 執行緒含義
the entire python program exits when no alive non-daemon threads are left.
os.kill(程序pid, 9) # 傳送訊號 9代表訊號編號 絕對終止
多個執行緒相互等待對方釋放響應的資源
執行緒在使用完互斥鎖 忘記解鎖 從而造成所有執行緒 全部都是阻塞等待
預防:
申請鎖
使用
釋放鎖
# 自動資源管理
with 互斥鎖:
使用
import threading
g_number =
0def
update_number
(lock)
:"""讓子程序執行"""
global g_number
for i in
range
(1000000):
# 嘗試加鎖 如果沒有人鎖定 成功;如果有人 等待
# lock.acquire()
with lock:
g_number +=
1# 釋放鎖
# lock.release()
if __name__ ==
'__main__'
:# 在門上安裝一把互斥所
lock = threading.lock(
)# 1 建立乙個子執行緒 執行 update_number
thd1 = threading.thread(target=update_number, args=
(lock,))
thd1.start(
) thd2 = threading.thread(target=update_number, args=
(lock,))
thd2.start(
)# 2 建立乙個全域性變數
# 3 讓子執行緒修改全域性變數
# 4 讓主線程等待子執行緒退出 列印全域性變數的值
# 如果這個值和子執行緒設定的值 說明執行緒間共享全域性資源 ; 否則不共享
thd1.join(
) thd2.join(
)print
("得到最終值為%s"
% g_number)
程序消耗資源更大 程序是分配資源的基本單位《穩定性 cpu密集型-數學計算》 可用多核
執行緒消耗資源更少 《輕量級 io密集型-爬蟲》
系統自帶的原生執行緒 可以用多核
cpython 直譯器產生的多執行緒(存在gil 全域性直譯器鎖 為了防止 cpython 中的多執行緒 同時訪問和修改直譯器內部的全域性資源 ) 導致在直譯器內部任意時間只有乙個執行緒在執行 不能使用多核
google瀏覽器新開標籤就會建立乙個程序 火狐瀏覽器新開乙個標籤就會建立新的執行緒
程序,執行緒池,執行緒
執行緒池的五個狀態 running 可以接受新的任務,也可以處理阻塞佇列裡的任務 shutdown 不能接受新的任務,可以處理阻塞佇列裡的任務,running 狀態下呼叫 shutdown 函式會裝變成 shutdown 狀態stop 不能接受新的任務,也不能處理阻塞佇列裡的任務,running 狀...
程序 執行緒 多執行緒
程序是系統中正在執行的乙個程式,程式一旦執行就是程序。程序可以看成程式執行的乙個例項。程序是系統資源分配的獨立實體,每個程序都擁有獨立的位址空間。乙個程序無法訪問另乙個程序的變數和資料結構,如果想讓乙個程序訪問另乙個程序的資源,需要使用程序間通訊,比如管道,檔案,套接字等。乙個程序可以擁有多個執行緒...
程序,執行緒,多執行緒,執行緒池
程序是執行緒的容器,乙個程序包含多個執行緒。執行緒的定義是程式的執行路徑。每個執行緒都定義了乙個獨特的控制流,如果應用程式涉及到複雜且耗時的操作,那麼設定不同的執行緒執行路徑會非常有好處,因為每個執行緒會被指定於執行特定的工作。單一執行緒會導致程式只能執行乙個任務,為了使程式能執行多個任務,就要用到...