由於gil的存在,python中的多執行緒其實並不是真正意義的多執行緒,如果想要充分地使用多核cpu的資源,在python中大部分情況需要使用多程序。
multiprocessing包是python中的多程序管理包。與threading.thread類似,他利用multiprocessing.process物件來建立乙個程序。該程序可以執行在python程式內部編寫的函式。該process物件與thread物件用法相同,也有start(),run(),join()方法。此外,該包也有lock/event/semaphore/condition類(這些物件可以像多執行緒那樣,通過引數專遞給各個程序),用以同步程序,其用法和threading包中的同類名一致。所以,multiprocessing的很大一部分和threading使用同一套api,只不過換到了多程序的情境。
process類
構造方法:
process( group,[ target[, name[, args[, kwargs]]]])
group :執行緒組,目前還沒有實現,庫引用中提示必須為none
target:要執行的方法
name:程序名
args/kwargs:要傳入方法的引數
is_alive():返回程序是否執行
join([timeout]):阻塞當前上下文環境程序,知道呼叫此方法的程序終止或者達到指定的timeout(可選引數).
start():程序準備就緒,等待cpu排程
run():start()呼叫該方法,如果例項程序時未制定傳入target,這start執行預設run方法
terminate():不管任務是否完成,立即停止工作程序
daemon:和執行緒的setdeamon功能一樣
name:程序名字
pid:程序號
from multiprocessing import process
import time,os
def f(name):
time.sleep(1)
print("process %s"%name)
class myprocess(process):
def run(self):
time.sleep(1)
print("%s run....."%self.name,time.ctime())
def info(title):
print("titlel:",title)
print("parent process :",os.getppid())
print("process id:",os.getpid()) #
if __name__ =="__main__":
p_list =
for i in range(3):
p = process(target=f,args=("lian",))
p.start()
for i in p_list:
i.join()
for i in range(3):
p = myprocess()
p.daemon = true #守護程序
p.start()
print("end ")
每個程序都有父程序,同一批程序裡的父類都是一樣的。
from multiprocessing import process
import time,os
def info(title):
print("titlel: %s\n"%title)
print("parent process :%d\n"%os.getppid())
print("process id:%d \n"%os.getpid()) #
if __name__ =="__main__":
p_list =
for i in range(3):
p = process(target=info,args=("lian process",))
p.start()
for i in p_list:
i.join()
輸出 :
多程序呼叫
多程序呼叫 大部分與多執行緒的操作一樣 呼叫方式1 from multiprocessing import process import time deff name time.sleep 1 print hello name,time.ctime if name main p list for i...
Rust的併發程式設計(一)多程序併發
併發,是指在巨集觀意義上同一時間處理多個任務。併發的方式一般包含為三種 多程序 多執行緒以及最近幾年剛剛火起來的協程。首先,我們建立兩個專案,乙個為子程序,乙個為主程序。在子程序的main.rs中,編寫如下 use std thread sleep use std time duration fn ...
Python併發機制的實現 一 多程序
python併發機制的實現 一 多程序 unix linux系統呼叫實現多程序 windows系統不支援 unix linux作業系統提供了乙個fork 系統呼叫,它非常特殊。普通的函式呼叫,呼叫一次,返回一次,但是fork 呼叫一次,返回兩次,因為作業系統自動把當前程序 稱為父程序 複製了乙份 稱...