摘自:
在新建立的子程序中,會把父程序的所有資訊複製乙份,它們之間的資料互不影響。
該方式只能用於unix/linux作業系統中,在windows不能用。
1importos2
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 processimport 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 processimport 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 poolimport 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,程序中是 程序的 ...