python提供了multiprocessing模組來開啟子程序,並在子程序中執行我們定製的任務。提一嘴(multiprocessing模組的功能眾多,支援子程序,通訊,共享資料,執行不同形式的同步。為些它提供了process、queue、pipe、lock等元件。)
建立程序的類process:
例項化process類可得到乙個物件,來啟乙個程序。
我們來看一下它的引數:
group引數未使用,值始終為none。
target表示呼叫的物件,就是子程序要執行的任務。
name可以為子程序命名。
args指定的為傳結target函式的位置引數,是乙個元組形式,必須有逗號,如:args=('monicx',)
kwargs指定的為傳結target函式的關鍵字引數,是乙個字典,如kwargs=
process類的方法有:
start():啟動程序,並呼叫該子程序中的p.run()
run():程序啟動進執行的方法,就是它去呼叫target指定的函式,我們自定義類的類中一定要實現該方法。
terminate():強制終止程序。不會進行任何清理操作,如果p建立了子程序,該子程序就成了殭屍程序,使用此方法需要小心:如果此程序還儲存了乙個鎖那麼也將不會釋放這個鎖,進而導致死鎖。
is_alive():判斷程序是否是「活著」的狀態。
join(timeout):讓主線程等待某一子程序結束,才繼續執行主程序。timeout是可選的超時時間。超過乙個時間主程序就不等待了。
建立子程序的兩種方式:
方式一:
from multiprocessing import process
import time
def test(name):
print("%s is running "% name)
time.sleep(2)
print('%s is done'%name)
if __name__ == '__main__':
#在windows系統之上,開啟子程序的操作一定要放在這下面
# process(target=test,kwargs=)
p=process(target=test,args=('monicx',))
p.start()#向作業系統傳送乙個請求,作業系統會申請記憶體空間給,然後把父程序的資料拷貝給子程序,作為子程序的初始資料。
print('*****==主')
執行效果為:
方式二:
from multiprocessing import process
import time
class myprocess(process):
def __init__(self,name):
super(myprocess,self).__init__()
self.name=name
def run(self):
print("%s is running " %self.name)
time.sleep(2)
print('%s is done'%self.name)
if __name__ == '__main__':
p=myprocess('monicx')
p.start()#就是呼叫run()方法。
print('====主')
執行結果:
驗證,程序之間的記憶體空間是相互隔離的。
from multiprocessing import process
import time
x=1000
def test():
global x
x=0print('子程序結束',x)
if __name__ == '__main__':
p=process(target=test)
p.start()
print('*****==主')
time.sleep(3)
print(x)
執行結果:
父程序如何等待子程序結束——join()
from multiprocessing import process執行結果:import time,random
def test(n):
print('%s is running'%n)
time.sleep(random.randint(1,4))
print('%s子程序結束了'%n)
if __name__ == '__main__':
start_time=time.time()
p_l=
for i in range(5):
p=process(target=test,args=(i,))
p.start()
for p in p_l:
p.join()
# p.join()#讓父程序在原地等
python程序之fork建立子程序
程式執 到os.fork 時,作業系統會建立 個新的程序 程序 然後複製 程序的所有資訊到 程序中 然後 程序和 程序都會從fork 函式中得到 個返回值,在 程序中這 個值 定是0,程序中是 程序的 id號 在unix linux作業系統中,提供了 個fork 系統函式,它 常特殊。普通的函式調 ...
python子程序 Python實戰之子程序
最近做乙個小工具需要用到python的字程序,看了一下python的api,subprocess模組可以就可以實現,並且還挺簡單 要實現乙個簡單的自程序,只需要 import sys,os,subprocess p subprocess.popen ls l shell false,stdin no...
Python中的子程序併發
date 2019 06 16 22 35 33 author headsen chen notice 個人原創 例項 import os,time time.sleep 1 from multiprocessing import process a 100 print a,os.getpid os...