程序是資源分配的最小單元,也是執行緒的容器。同乙個程序可以包括多個執行緒,並且執行緒共享整個程序的資源(暫存器、堆疊、上下文),乙個程序至少包括乙個執行緒。
程序結束後,程序中的擁有的執行緒都將銷毀,但是執行緒的結束不會影響同乙個程序中的其他執行緒的結束。乙個程式執行起來後,**+用到的資源稱之為程序,他是作業系統分配資源的基本單元,但是執行緒是cpu排程的基本單元。
選擇原則
1.匯入模組2.通過模組提提供的process類建立程序物件
3.啟動程序
import os
import time
import multiprocessing
defwork1()
:for i in
range(10
):print
('正在執行work1...'
, multiprocessing.current_process())
time.sleep(
0.5)
if __name__ ==
'__main__'
:# 獲取程序的編號
# 1)使用current_process().pid獲取程序編號
print
(multiprocessing.current_process(
).pid)
# 2)使用os模組來獲取
print
(os.getpid())
# 獲取程序的父id
print
('正在執行work1....'
, os.getpid(),
'父id...'
, os.getppid())
# 獲取主程序的名稱
print
(multiprocessing.current_process())
# 2.通過模組提供的process類建立程序物件
# target指定子程序的執行的分支函式
# name 指定子程序的名稱
process_obj = multiprocessing.process(target=work1, name=
'jincheng1'
)# 3.啟動程序
process_obj.start(
)print
('***x'
)
1)子程序引數傳遞
給子程序傳遞引數和給子執行緒傳遞引數的方法基本一致。
2)程序之間不能共享全域性變數
底層原理:子程序會複製主程序的資源到內部執行。
3)程序守護
process_obj.daemon = true4) 結束子程序
process_obj .terminate()使用queue佇列能是實現程序之間的通訊。
process_obj.join() #優先讓乙個程序先通訊
"""
1.準備兩個程序
2.準備乙個佇列,乙個程序向佇列中寫入資料,然後把佇列傳遞到另外乙個程序
3.另外乙個程序讀取資料
"""import time
import multiprocessing
# 寫入資料到佇列的函式
defwrite
(queue)
:for i in
range(10
):# 判斷佇列是否已滿
if queue.full():
print
('佇列已滿'
)break
queue.put(i)
print
("寫入成功"
, i)
time.sleep(1)
# 讀取佇列資料並顯示的函式
defread
(queue)
:while
true
:if queue.qsize ==0:
print
('佇列已空'
)break
value = queue.get(
)print
('讀取成功'
,value)
if __name__ ==
'__main__'
:# 建立乙個空的佇列
queue = multiprocessing.queue(5)
# 建立2個程序,分別寫資料、讀資料
write_process = multiprocessing.process(target=write, args=
(queue,))
read_process = multiprocessing.process(target=read, args=
(queue,))
write_process.start(
)# 優先讓寫資料程序執行結束之後,再讀取資料
write_process.join(
) read_process.start(
)
當需要的子程序數量不多的時候,可以直接利用multiprocessing中的process動態生成多個程序,但是如果是上百甚至上千個目標,手動的建立程序的工作量巨大,此時就可以用到multiprocessing模組提供的pool方法。
初始化pool時,可以建立乙個最大程序數,當有新的請求提交到pool中時,如果池還沒有滿,那麼就會建立乙個新的程序用來執行該請求,但是如果池中的程序數已經達到了指定的最大值,那麼該請求就會等待,直到池中有程序結束,才會用之前的程序來執行新的任務。
建立:
import multiprocessing工作方式pool = multiprocessing.process(n). #n表示程序池中的數量
程序以及狀態 程序的建立
程式 例如 py這是程式,是乙個靜態的 程序 乙個程式執行起來後,用到的資源 稱之為程序,它是作業系統分配資源的基本單元。不僅可以通過執行緒完成多工,程序也是可以的 乙個程式可以對應多個程序,如qq乙個程式,可以開啟多個qq則是多個程序。程序是擁有資源,如網路 記憶體等 工作中,任務數往往大於cpu...
Linux 程序概念以及程序狀態理解
2 程序狀態 2.2 孤兒程序 2.3 守護程序 精靈程序 程序是乙個pcb 程序控制塊 是乙個執行程式中的描述 在linux下是乙個task struct結構體,通過這個結構體實現作業系統對執行中程式的排程管理。1.1 task struct結構體 task struct結構體是linux核心中的...
程序管理 四 程序的狀態以及轉換
簡要描述 該時刻實際占有著cpu 簡要描述 可以執行,但是由於其他程序正在執行而暫時停止 這種情況下,只不過是系統暫時沒有把cpu分配給它而已,一旦系統將cpu分配給它,它立馬就可以跑。簡要描述 除非外部事件發生否則就不能執行 當乙個程序不能執行的時候,它就會被阻塞。典型的例子就是等待可以使用的輸入...