python建立子程序的幾種方式

2021-08-19 23:39:45 字數 2548 閱讀 7229

python的os模組封裝了常⻅的系統調⽤,其中就包括fork,可以在python程式中輕鬆建立⼦程序:

程式執⾏到os.fork()時,作業系統會建立⼀個新的程序(⼦程序),然後複製⽗程序的所有資訊到⼦程序中然後⽗程序和⼦程序都會從fork()函式中得到⼀個返回值,在⼦程序中這個值⼀定是0,⽽⽗程序中是⼦程序的 id號

但是由於windows沒有fork調⽤,難道在windows上⽆法⽤python編寫多程序的程式?

python是跨平台的,⾃然提供了⼀個跨平台的多程序⽀持。multiprocessing模組就是跨平台版本的多程序模組。

第一種:multiprocessing

#coding=utf-8

from multiprocessing import process

import os

# ⼦程序要執⾏的**

def run_proc(name):

print('⼦程序運⾏中,name= %s ,pid=%d...' % (name, os.getpid()))

if __name__=='__main__':

print('⽗程序 %d.' % os.getpid())

p = process(target=run_proc, args=('test',))

print('⼦程序將要執⾏')

p.start()

p.join()

print('⼦程序已結束')

其中join()⽅法可以等待⼦程序結束後再繼續往下運⾏,通常⽤於程序間的同步。

第二種:process⼦類

from multiprocessing import process

import time

import os

#繼承process類

class process_class(process):

#因為process類本身也有__init__⽅法,這個⼦類相當於重寫了這個⽅法,

#但這樣就會帶來⼀個問題,我們並沒有完全的初始化⼀個process類,所以就不能使⽤從這個類繼承的⼀些⽅法和屬性,

#最好的⽅法就是將繼承類本身傳遞給process.__init__⽅法,完成這些初始化操作

def __init__(self,interval):

process.__init__(self)

self.interval = interval

#重寫了process類的run()⽅法

def run(self):

print("⼦程序(%s) 開始執⾏,⽗程序為(%s)"%(os.getpid(),os.getppid()))

t_start = time.time()

time.sleep(self.interval)

t_stop = time.time()

print("(%s)執⾏結束,耗時%0.2f秒"%(os.getpid(),t_stop-t_start))

if __name__=="__main__":

t_start = time.time()

print("當前程式程序(%s)"%os.getpid())

p1 = process_class(2)

#對⼀個不包含target屬性的process類執⾏start()⽅法,就會運⾏這個類中的run()⽅法,所以這⾥會執⾏p1.run()

p1.start()

p1.join()

t_stop = time.time()

print("(%s)執⾏結束,耗時%0.2f"%(os.getpid(),t_stop-t_start))

第三種:程序池pool

from multiprocessing import pool

import os,time,random

def worker(msg):

t_start = time.time()

print("%s開始執⾏,程序號為%d"%(msg,os.getpid()))

#random.random()隨機⽣成0~1之間的浮點數

time.sleep(random.random()*2)

t_stop = time.time()

print(msg,"執⾏完畢,耗時%0.2f"%(t_stop-t_start))

po=pool(3) #定義⼀個程序池,最⼤程序數3

for i in range(0,10):

#每次迴圈將會⽤空閒出來的⼦程序去調⽤⽬標

print("----start----")

po.close() #關閉程序池,關閉後po不再接收新的請求

po.join() #等待po中所有⼦程序執⾏完成,必須放在close語句之後

print("-----end-----")

multiprocessing.pool常⽤函式解析:

python程序之fork建立子程序

程式執 到os.fork 時,作業系統會建立 個新的程序 程序 然後複製 程序的所有資訊到 程序中 然後 程序和 程序都會從fork 函式中得到 個返回值,在 程序中這 個值 定是0,程序中是 程序的 id號 在unix linux作業系統中,提供了 個fork 系統函式,它 常特殊。普通的函式調 ...

Python 程序的幾種建立方式詳解

在新建立的子程序中,會把父程序的所有資訊複製乙份,它們之間的資料互不影響。該方式只能用於unix linux作業系統中,在windows不能用。import os 注意,fork函式,只在unix linux mac上執行,windows不可以 pid os.fork 子程序永遠返回0,而父程序返回...

python中程序的幾種建立方式

摘自 在新建立的子程序中,會把父程序的所有資訊複製乙份,它們之間的資料互不影響。該方式只能用於unix linux作業系統中,在windows不能用。1 importos2 3 注意,fork函式,只在unix linux mac上執行,windows不可以 4 pid os.fork 5 子程序永...