1. 程式人生 > 實用技巧 >25、建立程序的兩種方式

25、建立程序的兩種方式

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())