程序的執行順序
阿新 • • 發佈:2018-11-07
程式是什麼?程序是什麼?
本質上就是一堆程式碼檔案,一個程式正在被作業系統讀取並執行,就會變成了程序
啟動程序的方式
1.系統初始化,會產生一個跟程序
2.使用者的互動請求 滑鼠雙擊某個程式
3.在一個程序發起系統呼叫啟動另一個程式*****
4.在批處理作業開始在某些專用計算可能被使用
不同系統建立程序的方式不同
unix 《centos MAC linux》
完全拷貝父程序的所有資料,子程序可以訪問父程序的資料?不可以。但是可以訪問拷貝過來資料副本
windows
建立子程序,載入父程序中所有可執行的檔案。
實現子程序的方式
from multiprocessing importProcess #建立子程序的物件的方法 import time,os def task(name):#子程序執行的是函式 print(name,"running") time.sleep(2) print(name,"stop") if __name__ == '__main__': #建立一個子程序物件,target = 傳入指定執行函式,args = kwargs = 是將函式需要的引數如何傳給函式 p = Process(target=task,args=("msj",)) p.start()#啟動子程序(這是就有作業系統來分配計算資源)print("父程序/當前程式程序編號",os.getpid())#獲得當前執行檔案的程序id print("是什麼呼叫當前程式", os.getpid())#獲得當前執行檔案的父程序id print("子程序編號",p.pid)#檢視子程序的id
主程序與子程序的執行順序
一旦啟動子程序,後續程式碼就會併發,沒有先後順序
也可以使用.join()等待子程序結束才能開始
from multiprocessing import Process import time def task(i): print(i,"start") time.sleep(i)print(i, "end") if __name__ == '__main__': start_time = time.time() for i in range(1,4): p = Process(target=task,args=(i,)) p.start() print("主程序") print("執行時間",time.time()-start_time)#這是子程序與父程序在作業系統處理優先順序相同,隨意隨機執行。 #同時子程序存在阻塞,所以父程序會先執行,同時根據相聚時間太緊,所以根據阻塞時間輸出 “”“ 主程序 執行時間 0.059999942779541016 1 start 2 start 3 start 1 end 2 end 3 end ”“”
join的使用
from multiprocessing import Process import time def task(i): print(i,"start") time.sleep(i) print(i, "end") if __name__ == '__main__': start_time = time.time() for i in range(1,4): p = Process(target=task,args=(i,)) p.start() #join()函式就是等待子程序的,無參等到結束,有參int表示等待秒數 p.join()#,這樣相當於父程序需要等待每一個子程序(1+2+3+其他程式碼執行的時間)6.623085975646973 print("主程序") print("執行時間",time.time()-start_time)
減少join的等待時間
from multiprocessing import Process import time def task(i): print(i,"start") time.sleep(i) print(i, "end") if __name__ == '__main__': start_time = time.time() ps = [] for i in range(1,4): p = Process(target=task,args=(i,)) ps.append(p) p.start() for p in ps: p.join()#同時併發等待,所以只需要最長時間(3+) print("主程序") print("執行時間",time.time()-start_time) """ 2 start 1 start 3 start 1 end 2 end 3 end 主程序 執行時間 3.3100392818450928 """