Python 進程三種創建方式

    進程,首先理解進程的概念,假如我們的電腦內存大小是一定的,要開啓多個軟件,內存的佔用就會越來越大,計算機有自己的處理方式。例如時間片輪轉,優先級調度等。如果內存當前被佔用大部分的空間,開啓的軟件過多,其他軟件也要得到計算機的內存空間,這時候內存就會輪番調度。這個時間間隔是非常短暫的給人的感覺就是多個軟件在一起執行。

   Python中創建多進程。Python的OS模塊封裝了常見的系統調用,多進程的調用就是fork,可以使用python創建多進程。

一、fork創建

import os

ret = os.fork() # 返回值等於0時,子進程
print(ret)
if ret>0:
    print("---父進程--%d-"%os.getpid())
else:
    print("---子進程---%d-%d-"%(os.getpid(),os.getppid()))

 注意,在win系統中,沒有fork這個系統調用,那麼如何在win系統中開啓多進程呢?

二、Multiprocessing  模塊 Process類

  第二種創建進程的方式,是通過Multiprocessing模塊中的Process類,創建Process對象,通過對象參數target=“需要執行的子進程”

from multiprocessing import Process
import time

def test():
    while True:
        print("---test---")
        time.sleep(1)

p = Process(target=test) # target參數需要執行的子進程
p.start() #讓這個進程開始執行test函數裏的代碼

while True:
    print("---main---")
    time.sleep(1)


注:與fork的不同點;fork不是跨平臺的,在win系統中不能使用,而在win系統中使用Process對象來調用子進程需要執行的方法。通過start開啓子進程;在fork中,主進程不會等待子進程的結束,而結束主進程,在Process開啓的子進程中,會等待所有的子進程結束後,纔會結束主進程。

三、通過繼承Process類,創建子進程

    創建子類,繼承父類(Process),重寫Run方法,實例化子類對象時,通過對象start開啓子進程,子進程所執行的內容,就是在重寫的run方法中的內容。在.start()方法時,會自動調用run方法。

from multiprocessing import Process
import time

class MyNewProcess(Process):
    def run(self): # 重寫run方法
        while True:
            print("---1----")
            time.sleep(1)


p = MyNewProcess()
p.start() # 開啓進程

while True:
    print("---main----")
    time.sleep(1)

繼承父類的這種方式,底層的實現其實就是Process創建的方式。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章