方法一:
multiprocess不是乙個模組而是python中乙個操作、管理程序的包。 之所以叫multi是取自multiple的多功能的意思,在這個包中幾乎包含了和程序有關的所有子模組。由於提供的子模組非常多,為了方便大家歸類記憶,我將這部分大致分為四個部分:建立程序部分,程序同步部分,程序池部分,程序之間資料共享。重點強調:程序沒有任何共享狀態,程序修改的資料,改動僅限於該程序內
from multiprocessing import process
def func(n):print(n)
if __name__=="__main__":
p=process(target=func,args=(5,)) #建立子程序,並傳參,引數元組形式 也可以傳關鍵字引數kwargs=必須是字典key要與方法中的形參相同一致
p.start() #作業系統傳送指令建立程序並執行target=方法
方法二:
from multiprocessing import process
class myprocess(process): #建立類#我們說程序之間的資料是隔離的,也就是資料不共享,看下面的驗證:def __init__(self,n,name):
super().__init__() #執行下乙個mro 直接寫不加任何引數
self.n=n #傳引數
self.name=name
def run(self): #重寫run方法
print(self.n)
print("子程序名稱",self.name)
print("子程序pid",self.pid)
if __name__=="__main__":
p=myprocess(100,name="子程序1") #建立程序
p.start() #作業系統傳送指令開闢程序並執行run方法
print("pid",p.pid)
引數介紹:
引數介紹:
1 group引數未使用,值始終為none
2 target表示呼叫物件,即子程序要執行的任務
3 args表示呼叫物件的位置引數元組,args=(1,2,'egon',)
4 kwargs表示呼叫物件的字典,kwargs=
5 name為子程序的名稱
程序之間是空間隔離的:
from multiprocessing import process
import time
n=100 #首先我定義了乙個全域性變數,在windows系統中應該把全域性變數定義在if __name__ == '__main__'之上就可以了
def work():
global n
n=0print('子程序內: ',n)
if __name__ == '__main__':
p=process(target=work)
p.start()
time.sleep(2)
p.join() #等待子程序執行完畢,如果資料共享的話,我子程序是不是通過global將n改為0了,但是你看列印結果,主程序在子程序執行結束之後,仍然是n=100,子程序n=0,說明子程序對n的修改沒有在主程序中生效,說明什麼?說明他們之間的資料是隔離的,互相不影響的
print('主程序內: ',n)
#看結果:
# 子程序內: 0
# 主程序內: 100
process中的其他操作方法:1. p.start():啟動程序,並呼叫該子程序中的p.run()
2. p.run():程序啟動時執行的方法,正是它去呼叫target指定的函式,我們自定義類的類中一定要實現該方法
3. p.terminate():強制終止程序p,不會進行任何清理操作,如果p建立了子程序,該子程序就成了殭屍程序,使用該方法需要特別小心這種情況。如果p還儲存了乙個鎖那麼也將不會被釋放,進而導致死鎖
4. p.is_alive():如果p仍然執行,返回true
5. p.join([timeout]):主線程等待p終止(強調:是主線程處於等的狀態,而p是處於執行的狀態)。timeout是可選的超時時間,需要強調的是,p.join只能join住start開啟的程序,而不能join住run開啟的程序
for迴圈在併發中的使用:
# 驗證for迴圈def func1(i):
time.sleep(1)
print(i)
if __name__=="__main__":
lst=
for i in range(10):
p1=process(target=func1,args=(i,))
p1.start()
for el in lst: 在物件後加join
el.join()
print("主程式執行完成")
# 驗證併發時間
# def func1(n):
# time.sleep(n)
# print(n)
# def func2(n):
# time.sleep(n)
# print(n)
# def func3(n):
# time.sleep(n)
# print(n)
# if __name__=="__main__":
# p1=process(target=func1,args=(1,))
# p2=process(target=func2,args=(2,))
# p3=process(target=func3,args=(3,))
# p1.start()
# p2.start()
# p3.start()
# print("主程式執行完成")
子程序開啟之後咱們是沒法操作的,並且沒有為子程序input輸入提供控制台,所有你再在子程序中寫上了input會報錯,eoferror錯誤
Day3 3 美攻鐵道市場零距離接觸行駛中的火車
之所以被稱為鐵道市場是因為菜攤就分布在火車軌道的兩側,每天都有八趟火車經過最牛菜市場,只見火車貼著菜攤,十分驚險。菜販們在這裡 當地特產的水果,如荔枝 榴蓮 芒果和新鮮的海產品 乾辣椒等。所有的攤販都在鐵道兩邊擺攤,留下中間的一條鐵軌給人走。走在枕木上,不時踩到石頭上,或者踢到鉚釘,這就是在鐵軌上走...
day36 程序理論和建立及join方法和殭屍程序
上節課的內容 01 作業系統 系統介面 作業系統核心 02 多道技術 空間上的復用 復用記憶體的空間 1 多道 個程式的 都存入記憶體 2 記憶體空間是物理隔離的 時間上的復用 復用cpu的時間 cpu的切換 1 任務的執行遇到io阻塞 提公升效率 2 任務占用cpu時間過長 降低效率 如果我們的核...
windows程序的建立方法
1.winexec lpcstr lpcmdline,uint ucmdshow 引數 lpcmdline 指定程式的相對路徑或絕對路徑,命令列引數 ucmdshow 指定視窗的顯示方式 視窗的顯示方式 sw show 顯示視窗 sw maximize 最大化視窗 sw minimize 最小化視窗...