python中的程序 Python中程序

2021-10-13 03:31:04 字數 3101 閱讀 6039

程式

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

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

並行與併發

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

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

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

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

1、利用os模組中的fork()來建立子程序

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下沒有。

2、利用multiprocessing模組process類建立程序

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

from multiprocessing importprocessimporttimedeftest(a):for i inrange(a):print("子程序...")

time.sleep(1)

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

p.start()

p.join(2)whiletrue: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():使程序立即終止

3、利用process類的子類來建立程序

from multiprocessing importprocessimporttimeclassnewprocess(process):def __init__(self,num):

self.num=num

super().__init__()defrun(self):print("開始重寫run了")

i=0whiletrue:

time.sleep(1)

i+= 1

print("子程序",i)if i ==self.num:breakp= newprocess(6)

p.start()

p.join(2)whiletrue:ifp.is_alive():print("父程序")

time.sleep(1)elif notp.is_alive():print("子程序結束了")break

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

4、利用multiprocessing模組程序池pool建立程序

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

from multiprocessing importpoolimporttimeimportosdefwork(i):

time.sleep(1)print(i,"當前程式的pid=",os.getpid())defwork1(i):

time.sleep(1)print(i,"當前程式的pid=",os.getpid())defwork2(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()後面使用。

python中迭代器的基本方法 Python迭代器

迭代器是可以迭代的物件。在本教程中,您將了解迭代器的工作原理,以及如何使用 iter 和 next 方法構建自己的迭代器。迭代器在python中無處不在。它們優雅地實現在迴圈,推導,生成器等中,但隱藏在明顯的視覺中。python中的迭代器只是乙個可以迭代的物件。乙個將一次返回資料的物件或乙個元素。從...

python中的程序

乙個程式執行起來後,用到的資源 稱之為程序,它是作業系統分配資源的基本單元。乙個程序中至少有乙個執行緒。1 多程序之間不會修改全域性變數,多程序之間共享資源用 訊息佇列 先進先出,後進後出 queue。2 結論 每個子程序在執行前都會複製乙份主程序 多程序之間特別占用資源。建立程序 1 匯入mult...

Python中的程序

import os import time from multiprocessing import process nums 1,2,3 def wroker1 子程序要執行的 print 程序1中的記憶體位址 s id nums print in process1 pip d,nums s os....