from multiprocessing import執行結果:process
import
osn=100 #
每次開啟乙個程序就會把這裡的**從頭到尾執行一遍,所以每乙個程序開始的n都是100,每開啟乙個程序對全域性變數n都會執行減一操作
deffunc():
global
n n-=1
print("
子程序:%s,引數n:%s
"%(os.getpid(),n))
if__name__=="
__main__":
for i in range(10): #
建立10個程序
p=process(target=func) #
開啟的每乙個程序都是執行func函式
p.start()
print("
主程序:%s,引數n:%s
"%(os.getpid(),n))
所以不同程序之間的資料是完全隔離的;
建立程序可以使用process類 或者可以自己建立乙個類:
from multiprocessing import執行結果:process
import
osclass myprocess(process): #
自定義乙個類繼承自process類
def run(self): #
當建立的子程序物件執行start方法時 就會自動呼叫r類內的un方法
print("
子程序:%s
"%os.getpid())
if__name__=="
__main__":
p=myprocess() #
例項化乙個類,建立程序
p.start() #
就會自動執行myprocess類的run()方法
print("
主程序:%s
"%os.getpid())
可是如果我們想對要建立的子程序執行的函式傳遞乙個引數,應該怎麼操作:
其實只需要在建立類的時候,初始化方法中傳遞引數即可:
from multiprocessing import執行結果:process
import
osclass myprocess(process): #
建立乙個類,繼承自process
def__init__
(self,arg1,arg2):
super().
__init__() #
需要繼承自父類process的初始化方法,不要進行重寫初始化方法,否則會覆蓋,
self.arg1=arg1
self.arg2=arg2
def run(self): #
建立的程序物件執行start方法時會自動執行類中的run方法
print("
子程序:%s,引數(%s,%s)
"%(os.getpid(),self.arg1,self.arg2))
if__name__=="
__main__":
p=myprocess(1,2) #
建立乙個程序
p.start() #
開啟乙個程序,會自動執行類myprocess類中的run()方法
print("
主程序:%s
"%os.getpid())
在自定義的類中實現其他的方法(比如下面例子中的walk()方法),在主程序中調其實是在主程序中執行類中的方法,在類內呼叫類內的方法,會在子程序中執行類中的方法:
from multiprocessing import執行結果:process
import
osclass myprocess(process): #
建立乙個類,繼承自process
def__init__
(self,arg1,arg2):
super().
__init__() #
需要繼承自父類process的初始化方法,不要進行重寫初始化方法,否則會覆蓋,
self.arg1=arg1
self.arg2=arg2
def run(self): #
建立的程序物件執行start方法時會自動執行類中的run方法
print("
子程序:%s,引數(%s,%s)
"%(os.getpid(),self.arg1,self.arg2))
self.walk()
#在run()方法中呼叫walk()方法,就是在子程序中執行該方法
defwalk(self):
print("
子(主)程序:%s
"%os.getpid()) #
在類內呼叫walk()方法,就是子程序來執行,就是子程序的pid號,在主程序中呼叫walk()方法就由主程序來執行該方法,相應的就是主程序的pid號
if__name__=="
__main__":
p=myprocess(1,2) #
建立乙個程序
p.start() #
開啟乙個程序,會自動執行類myprocess類中的run()方法
print("
主程序:%s
"%os.getpid())
p.walk()
#列印主程序的pid號,因為是在主程序中呼叫的該方法
學習記錄Day3(5)
程式理解題,判斷程式的輸出。作用,結束本次迴圈 includeusing namespace std int main 迴圈內共自增兩次 x 自增一次 迴圈一次增加4 cout x int main 1結束後無break,進入下一句 case 2 a b break a b 有break結束 cas...
坦克大戰 day 35
gamemap類中 繪製沒有遮擋效果的塊 public void drawbk graphics g 只繪製有遮擋效果的塊 public void drawcover graphics g tank類 水泥塊不會被擊毀 public void bulletscollidemaptile listti...
Day35 不同路徑
示例1 輸入 m 3,n 7 輸出 28 示例2 輸入 m 3,n 2 輸出 3 解釋 從左上角開始,總共有 3 條路徑可以到達右下角。向右 向下 向下 向下 向下 向右 向下 向右 向下 示例3 輸入 m 7,n 3 輸出 28 示例4 輸入 m 3,n 3 輸出 6 1 m,n 100 題目資料...