day33 建立程序的方法和相關操作

2022-07-24 02:30:14 字數 3078 閱讀 7013

方法一:

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 最小化視窗...