from multiprocessing import Process import time ##從程序中啟動進程的兩種方式:
def task(i): print('%s start!'% i) time.sleep(2) print('%s stop!' % i) #方法一:
if __name__ == '__main__': #在window系統中
p = Process(target=task,args=('a',)) #設置一個進程對象,執行task,傳入參數字符串a,args需要傳入元組
p.start() #啟動進程
p.join() #父進程必須等到子進程完成后才能繼續執行,可設置等待超時時間
print('這是主進程!') #方法二:
class Myprocess(Process): #創建一個繼承Process的類
def run(self): task('a') #設置需要啟動的進程
if __name__ == '__main__': w = Myprocess() w.start() w.join() print('這是主進程!') ##進程對象常用屬性
if __name__ == '__main__': p = Process(target=task,args=('a',),name='process-1') #name屬性可以設置進程的名稱
p.start() p.join() # 讓父進程等待子進程結束,父進程讓出了CPU執行權
print(p.name) # 進程名稱
print(p.pid) # 獲取這個進程的id
p.terminate() # 結束子進程
print(p.is_alive()) # 進程是否還存活
# p這個進程的父進程是當前運行的這個進程
import os print(os.getpid()) # 當前自己進程的id
print(os.getppid()) # 父進程的id
##父進程與子進程執行的先后順序
''' 父進程一定先執行 一旦啟動子進程,后續的代碼就並發,沒有先后順序 如果父進程需要等待子進程結束后才能執行 '''
##僵屍進程與孤兒進程
''' 僵屍進程: 一個進程任務執行完就死亡了,但是操作系統不會立即將其清理,為的是開啟這個子進程的父進程可以訪問到這個子進程的信息 孤兒進程 : 一個父進程已經死亡,然而他的子進程還在執行,這時候操作系統會接管這些孤兒進程 '''