python 程序,啊這個程序啊

2021-08-31 21:37:45 字數 3494 閱讀 1034

程式:編寫完的**稱為程式。

程序:又稱重量級程序,正在執行中的程式稱為程序。程序的執行會占用記憶體等資源。多個程序同時執行時,每個程序的執行都需要由作業系統按一定的演算法(rr排程、優先數排程演算法等)分配記憶體空間。

並行:在多核系統中,每個cpu執行乙個程序,可以理解為cpu的數大於程序數,所有程序同時進行。

併發:在作業系統中同時執行多個程序,可以理解為cpu的數小於程序數,有些程序會沒有機會執行。

併發與並行的區別:並行指兩個或多個程式在同一時刻執行;併發指兩個或多個程式在同一時間間隔內發生,可以理解為在表面上看是同時進行,但在同一時刻只有少於程式的總數的程式在執行,計算機利用自己的排程演算法讓這些程式分時的交叉執行,由於交換的時間非常短暫,巨集觀上就像是在同時進行一樣。

在python中,每乙個執行的程式都有乙個主程序,可以利用模組中封裝的方法來建立子程序。

import os, time

pid = os.fork()

print("外面的pid",pid)

if pid == 0:

print("子程序中的程式")

print("子程序的pid=", os.getpid())

print("父程序的pid=", os.getppid())

elif pid > 0:

print("父程序中的程式")

print("子程序的pid=", os.getpid())

print("父程序的pid=", os.getppid())

else :

print("建立失敗")

解釋:

os.fork():os模組中用來建立子程序的方法,當程式執行到os.fork()時,作業系統會將當前的程序複製乙份,原來的程序稱為父程序,新建立的程序稱為子程序,兩個程序會各自互不干擾的執行下面的程式,父程序與子程序的執行順序與系統排程有關。父程序與子程序都會在os.fork()中得到乙個返回值,子程序的返回值為0,父程序的返回值為子程序的程序號,這個值永遠大於零,具體數值由作業系統分配,如果返回值為負數則表明建立子程序失敗。

os.getpid():獲取程序的程序號。

os.getppid():獲取父程序的程序號。

來張了解下

注意:這個os.fork()方法只有在unix系統中才會有,在window下沒有。

在multiprocessing模組中提供乙個process()類來建立程序,直接上**:

from multiprocessing import process

import time

def test(a):

for i in range(a):

print("子程序...")

time.sleep(1)

p = process(target=test,args=(5,))

p.start()

p.join(2)

while true:

print("父程序...")

time.sleep(1)

解釋:

這裡的p相當於process類的乙個例項物件,每例項化乙個物件就是建立乙個子程序。

target = test :子程序所執行的任務,就是test這個函式

args = (5,)  :給程序函式傳參,這裡需要用元祖的方式進行傳參

p.start() :執行子程序,只用呼叫start()方法,子進才會執行

p.join(n)  :讓主程序等待n秒鐘

在程序結束後,主程序會等待子程序先結束,如果主程序先結束,那麼所有的子程序都會結束。

process常用的方法:

start():啟動程序

is_alive() :判斷程序是否還在執行,返回true 或 false

join(n) : 主程序等待子程序,n為等待的時間(秒)

run() :在呼叫start方法時會自動呼叫run()方法,可以建立process類的子類來重寫run()方法的方式建立程序

terminate():使程序立即終止

from multiprocessing import process

import time

class newprocess(process):

def __init__(self,num):

self.num = num

super().__init__()

def run(self):

print("開始重寫run了")

i = 0

while true:

time.sleep(1)

i += 1

print("子程序",i)

if i == self.num:

break

p = newprocess(6)

p.start()

p.join(2)

while true:

if p.is_alive():

print("父程序")

time.sleep(1)

elif not p.is_alive():

print("子程序結束了")

break

這個方法核心就是建立乙個process類的子類,利用重寫run()方法來實現任務的新增。

process類適合用於建立所需程序數量不多的情況,如果需要建立大量的程序,則需要利用程序池來建立程序。

from multiprocessing import pool

import time

import os

def work(i):

time.sleep(1)

print(i,"當前程式的pid=",os.getpid())

def work1(i):

time.sleep(1)

print(i,"當前程式的pid=",os.getpid())

def work2(i):

time.sleep(1)

print(i,"當前程式的pid=",os.getpid())

# 建立程序池

pool = pool(2)

# 使程序開始執行

# 關閉程序池

pool.close()

# 讓主程序等待子程序

pool.join()

解釋:

pool = pool(2)為建立乙個程序池,程序池中同時開兩個程序,如果任務多於程序數時,程序會逐個執行任務,當乙個程序完成任務後,接著執行待完成的任務,直到所有任務全部完成。

pool.close() :關閉程序池,停止向程序池中新增任務

pool.join()  :使主程序等待。必須在close()或者terninate()後面使用。

這個怎麼用啊?沒用過

toc這個怎麼用啊 沒用過 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下markdown的基本語法知識。全新的介面設計,將會帶來全新的寫作體驗 在創作中心設定你喜愛的 高亮樣式,markdown將 片顯示選擇的...

Python面向啊物件(四)

new 方法 new 方法是由object基類提供的內建方法,主要用來建立單例類 物件建立時 new 方法首先為物件分配乙個記憶體空間 如果類中沒有顯式定義 new 方法,則類中的 new 方法繼承自object基類 然後 new 方法返回物件的引用,init 方法接收到返回的物件引用後才會開始初始...

python 程序 python程序

python程序池pool 當需要建立的子程序數量不多時,可以直接利用multiprocessing中的process動態生成多個程序,但如果是上百甚至上千個目標,手動的去建立程序的工作量巨大,此時就可以用到multiprocessing模組提供的pool方法。初始化pool是,可以指定乙個最大程序...