25、建立程序的兩種方式
阿新 • • 發佈:2021-01-19
Day 25
一、知識儲備
併發程式設計中的重要概念
序列:自上而下,順序執行
併發:在多個程序間快速的來回切著執行
並行:是真正的同時執行,必須具備多核CPU,有幾個核心就能並行幾個任務,當任務數量超過核心數還是併發執行
以上三個概念都是用於描述處理任務的方式
阻塞:指的是程式遇到IO操作,無法繼續執行程式碼的一種狀態
非阻塞:程式沒有遇到IO操作的一個狀態
阻塞非阻塞可以用來描述執行任務的方式
input()預設是一個阻塞的操作
我們可以用一些手段將阻塞的操作變成非阻塞的操作,例如非阻塞的socket
一個程序的三種狀態
阻塞:
執行:
就緒:
程序與程式
程式是一堆程式碼放在檔案中,通常字尾為exe,原本是儲存在硬碟上的。 程序是將程式碼從硬碟讀取到記憶體然後執行產生的 程序是由程式產生的 一個程式可以產生多個程序,例如QQ多開,每一個程序都具備一個PID,程序編號是唯一的
PID和PPID
PID是當前程序的編號
PPID是父程序的編號
注意:當我們執行py檔案時,執行的是python直譯器
二、建立程序的兩種方式
- 方式一:
from multiprocessing import Process#匯入,例項化這個類,執行target import os def task(): print('process') print(os.getpid()) if __name__ == '__main__': # 例項化一個程序物件,並制定他要做的事,用函式來指定 p = Process(target=task,args = (3,)) # 注意這裡task不要加括號,不然直接執行了,後後面可以跟引數,只有一個的時候要, p.start() # 給作業系統傳送訊息,讓它開啟程序 print('父程序%s' % os.getpid()) print('over')
- 方式二:
import os from multiprocessing import Process class Downloader(Process): # 當你想對程序高度自定義的時候,可以繼承一下類 def __init__(self, url, size, name): super().__init__() self.url = url self.size = size self.name = name def run(self): print(os.getpid()) pass if __name__ == '__main__': m = Downloader() m.start() print('over', os.getpid())