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

2021-09-29 16:16:58 字數 2739 閱讀 5777

在新建立的子程序中,會把父程序的所有資訊複製乙份,它們之間的資料互不影響。

該方式只能用於unix/linux作業系統中,在windows不能用。

import os

# 注意,fork函式,只在unix/linux/mac上執行,windows不可以

pid = os.fork()

# 子程序永遠返回0,而父程序返回子程序的id。

if pid == 0:

print('子程序')

else:

print('父程序')

multiprocessing模組提供了乙個process類來代表乙個程序物件,下面的例子演示了啟動乙個子程序並等待其結束:

from multiprocessing import process

import time

def test(name, age):

for i in range(5):

print("--test--%s\t%d" % (name, age))

time.sleep(1)

print("子程序結束")

if __name__ == '__main__':

p = process(target=test, args=("aaa", 18))

p.start()

# 等待程序例項執⾏結束,或等待多少秒;

p.join() # 等待的最長時間

print("主程序結束")

"""輸出結果:

--test--aaa 18

--test--aaa 18

--test--aaa 18

--test--aaa 18

--test--aaa 18

子程序結束

主程序結束

"""

join()方法表示主程序等待子程序執行完成後繼續往下執行,如果把join()注釋掉,則主程序開啟子程序後不停頓繼續往下執行,然後等待子程序完成程式結束。

把join()方法注釋掉的結果:

"""

輸出結果:

主程序結束

--test--aaa 18

--test--aaa 18

--test--aaa 18

--test--aaa 18

--test--aaa 18

子程序結束

"""

建立新的程序還能夠使用類的方式,可以自定義乙個類,繼承process類,每次例項化這個類的時候,就等同於例項化乙個程序物件,請看下面的例項:

from multiprocessing import process

import time

import os

class myprocess(process):

def __init__(self):

# 如果子類要重寫__init__是必須要先呼叫父類的__init__否則會報錯

# process.__init__(self)

super(myprocess,self).__init__()

# 重寫porcess的run()方法

def run(self):

print("子程序(%s)開始執行,父程序(%s)" % (os.getpid(), os.getppid()))

for i in range(5):

print("--1--")

time.sleep(1)

if __name__ == '__main__':

t_start = time.time()

p = myprocess()

p.start()

# p.join()

print("main")

for i in range(5):

print("--main--")

time.sleep(1)

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

初始化pool時,可以指定乙個最大程序數,當有新的請求提交到pool中時,如果池還沒有滿,那麼就會建立乙個新的程序用來執行該請求;但如果池中的程序數已經達到指定的最大值,那麼該請求就會等待,直到池中有程序結束,才會建立新的程序來執行,請看下面的例項:

from multiprocessing import pool

import os

import time

def worker(num):

# for i in range(3):

print("----pid=%d num=%d---" % (os.getpid(), num))

time.sleep(1)

if __name__ == '__main__':

# 定義乙個程序池,最大程序數3

pool = pool(3)

for i in range(10):

print("---%d--" % i)

# 使用非阻塞方式呼叫func(並行執行),一般用這個。

# 關閉程序池

pool.close()

# 等待所有子程序結束,主程序一般用來等待

pool.join() # 程序池後面無操作時必須有這句

python建立子程序的幾種方式

python的os模組封裝了常 的系統調 其中就包括fork,可以在python程式中輕鬆建立 程序 程式執 到os.fork 時,作業系統會建立 個新的程序 程序 然後複製 程序的所有資訊到 程序中然後 程序和 程序都會從fork 函式中得到 個返回值,在 程序中這個值 定是0,程序中是 程序的 ...

python中程序的幾種建立方式

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

python建立程序的方式

import os pid os.fork if pid 0 print 我是子程序,程序號是 s os.getpid print 我是子程序,我的父程序號是 s os.getppid else print 我是父程序,程序號是 s os.getpid print over from multipr...