1. 程式人生 > >python 開啟程序的兩種方法、以及查詢子程序與父程序

python 開啟程序的兩種方法、以及查詢子程序與父程序

方法1

先輸出主程序,再輸出子程序是因為 p.start() 只是給系統傳送就緒訊號有延時,所以主程序都執行完了,可能子程序才到他開始執行

from multiprocessing import Process  # 建立程序的模組

def task(name):
    print(name)

if __name__ == '__main__':  
    # 開啟子程序  引數1:方法名(不要帶括號)   引數2:引數(元祖)      返回物件
    p = Process(target=task, args=('子程序1',))
    p.start()  # 只是給作業系統傳送了一個就緒訊號,並不是執行。作業系統接收訊號後安排cpu執行
print('主程序') # 輸出:主程序--> 子程序

方法2 - 類的方法

from multiprocessing import Process  # 建立程序的模組

class MyProcess(Process):
    def __init__(self, name):
        super().__init__()
        self.name = name

    def run(self):  # 固定名字run !!!必須用固定名
        print(self.name)

if __name__ == '__main__'
: # 必須要這樣啟動 p = MyProcess('子程序1') p.start() print('主程序')

檢視程序ID 與 父程序ID

import os
from multiprocessing import Process

def taks():
    # os.getpid = 取程序id
    # os.getppid =  取父程序id
    print('這裡是程序: %sd   父程序ID:%s' % (os.getpid(), os.getppid()))

if __name__ == '__main__':
    p = Process(target=taks)
    p.start()

    print('主程序'
,os.getpid())

.jion 等待子程序執行完畢

import os
from multiprocessing import Process

class MyProcess(Process):
    def __init__(self, name):
        super().__init__()
        self.name = name

    def run(self):  # 固定名字run !!!
        print(self.name)

if __name__ == '__main__':
    p = MyProcess('子程序1')
    p.start()

    p.join()  # 【主程序等 子程序執行完畢再執行後面程式】
    print('主')

terminate 像作業系統傳送幹掉程序命令is_alive,不會立即關閉,所以is_alive立刻檢視的結果可能還是存活

is_alive 判斷程序是否存活