在新建立的子程序中,會把父程序的所有資訊複製乙份,它們之間的資料互不影響。
該方式只能用於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...