python中程序的幾種建立方式

2022-06-17 11:42:13 字數 2747 閱讀 5363

摘自:

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

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

1

importos2

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

4 pid =os.fork()5#

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

6if pid ==0:

7print('

子程序')8

else:9

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中程序

程式 程式 編寫完的 稱為程式。程序程序 又稱重量級程序,正在執行中的程式稱為程序。程序的執行會占用記憶體等資源。多個程序同時執行時,每個程序的執行都需要由作業系統按一定的演算法 rr排程 優先數排程演算法等 分配記憶體空間。並行與併發 並行 在多核系統中,每個cpu執行乙個程序,可以理解為cpu的...

linux系統中程序的建立

linux系統的程序建立時區別於其他的系統的,它並沒有提供spawn機制。而是把乙個程序的建立分成了兩步 fork和exec 先建立乙個程序,再讓子程序執行新的程式。首先系統呼叫fork 函式,若呼叫成功則產生乙個新的程序,值的一提的是該函式會產生兩個返回值。當父程序呼叫的時候返回0,子程序呼叫的時...

python建立子程序的幾種方式

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