在介紹多程序之前,首先介紹下作業系統獲取關於程序中的一些資訊
方法描述
os.getpid()
獲取當前程序的pid
os.getppid()
獲取當前程序的父程序的pid
在python中,我們一般都是通過引入multiprocessing模組來實現多程序程式設計,multiprocessing模組提供了乙個process類來實現乙個程序物件。
process(target,name,args,kwargs)
from multiprocessing import process
import os
# 子程序要執行的**
defrun_proc
(name)
:print
('run child process %s (%s)...'
%(name, os.getpid())
)if __name__==
'__main__'
:print
('parent process %s.'
% os.getpid())
p = process(target=run_proc, args=
('test',)
)print
('child process will start.'
) p.start(
) p.join(
)print
('child process end.'
)
執行結果如下圖所示,在上面程式中首先通過呼叫process類產生乙個程序例項,並指定該程序執行任務時run_proc
函式,傳入的引數是test
,在這是需要注意的是,如果傳入的引數只有乙個,就需要在引數後面新增乙個,
至於start
和join
方法用途可以檢視下面的表。通過呼叫os.getpid()
是獲取當前執行的程序的pid。通過圖可以看到父程序pid是23888,子程序pid是24540
process屬性方法介紹 方法
描述start()
啟動程序,呼叫程序中的run()方法
terminate()
強制終止程序,不會進行任何清理操作。如果該程序終止前,建立了子程序,那麼該子程序在其強制結束後變為殭屍程序
is_alive()
判斷某程序是否存活,存活返回true,否則false
join([timeout])
主線程等待子執行緒終止。timeout為可選擇超時時間;需要強調的是,p.join只能join住start開啟的程序,而不能join住run開啟的程序
run()
程序啟動時執行的方法,正是它去呼叫target指定的函式,我們自定義類的類中一定要實現該方法
上面介紹了如果只建立單個程序的方法,如果同時建立多個程序,使用上面的方式則顯得有點累贅。這裡multiprocessing模組就提供了pool類,用於建立程序池,使用程序池的好處就是通過程序池容易對多個程序進行管理。
pool(numprocess,initializer,initargs)
python程序池pool常用方法
方法描述
from multiprocessing import pool
import os, time, random
deflong_time_task
(name)
:print
('run task %s (%s)...'
%(name, os.getpid())
) start = time.time(
) time.sleep(random.random()*
3)end = time.time(
)print
('task %s runs %0.2f seconds.'
%(name,
(end - start)))
if __name__==
'__main__'
:print
('parent process %s.'
% os.getpid())
p = pool(4)
for i in
range(5
):(i,)
)print
('waiting for all subprocesses done...'
) p.close(
) p.join(
)print
('all subprocesses done.'
)
執行結果如下圖所示
python之多程序
要讓python實現多程序 multiprocessing 我們先來了解作業系統相關知識。unix 和 linux 作業系統提供了乙個 fork 函式系統呼叫,它非常特殊。普通的函式,呼叫一它次,執行一次,但是 fork 函式呼叫一次執行兩次,因為作業系統自動把當前程序 稱為父程序 複製了乙份 稱為...
Python學習之多程序例項
第一部分 任務分發端 usr bin env python coding utf 8 time 17 9 17 上午10 49 author mylovin file multiprocess server.py software pycharm 說明 多程序例項 分發任務端 匯入必備標頭檔案 im...
python學習筆記之多程序
我們現代的作業系統,都是支援 多工 的作業系統,對於操程式設計客棧作系統來說,乙個任務就是乙個程序 process 比如開啟乙個瀏覽器就是啟動乙個瀏覽器程序。如果我們將計算器的核心cpu比喻為一座工廠,那麼程序就像工廠裡的車間,它代表cpu所能處理的單個任務。任一時刻,cpu總是執行乙個程序,其他程...