程序執行緒擴充套件

2021-09-26 04:49:11 字數 2700 閱讀 5382

程序建立

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 狀...

程序 執行緒 多執行緒

程序是系統中正在執行的乙個程式,程式一旦執行就是程序。程序可以看成程式執行的乙個例項。程序是系統資源分配的獨立實體,每個程序都擁有獨立的位址空間。乙個程序無法訪問另乙個程序的變數和資料結構,如果想讓乙個程序訪問另乙個程序的資源,需要使用程序間通訊,比如管道,檔案,套接字等。乙個程序可以擁有多個執行緒...

程序,執行緒,多執行緒,執行緒池

程序是執行緒的容器,乙個程序包含多個執行緒。執行緒的定義是程式的執行路徑。每個執行緒都定義了乙個獨特的控制流,如果應用程式涉及到複雜且耗時的操作,那麼設定不同的執行緒執行路徑會非常有好處,因為每個執行緒會被指定於執行特定的工作。單一執行緒會導致程式只能執行乙個任務,為了使程式能執行多個任務,就要用到...