1. 程式人生 > >程序的執行順序

程序的執行順序

程式是什麼?程序是什麼?

本質上就是一堆程式碼檔案,一個程式正在被作業系統讀取並執行,就會變成了程序

啟動程序的方式

1.系統初始化,會產生一個跟程序

2.使用者的互動請求 滑鼠雙擊某個程式

3.在一個程序發起系統呼叫啟動另一個程式*****

4.在批處理作業開始在某些專用計算可能被使用

不同系統建立程序的方式不同

unix 《centos MAC linux》

完全拷貝父程序的所有資料,子程序可以訪問父程序的資料?不可以。但是可以訪問拷貝過來資料副本

windows

建立子程序,載入父程序中所有可執行的檔案。

實現子程序的方式

from multiprocessing import
Process #建立子程序的物件的方法 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
"""