程序理論以及開啟子程序的兩種方式

2022-06-30 16:18:12 字數 2788 閱讀 8716

程序理論(book:現代作業系統)

為何開啟子程序需要放在main下面:因為執行到start他會向作業系統發起啟動子程序的訊號,然後作業系統會把整個**塊執行下,找到子程序要執行的任務,

**執行到最下面,又執行了start,又重複執行一次。執行緒可以不放在main下面是因為執行緒不用匯入主線程裡的東西,他們共享資源。

程序就是乙個正在執行的程式或者說是乙個程式的執行過程。

pid process id  程序在作業系統裡的身份證號

序列、併發、並行、多道技術

併發實現的本質:切換 + 儲存狀態

時間復用:占用cpu過長或者有另外乙個優先順序更高的任務搶走cpu

i/0操作 讀寫

time.sleep()本質和時間復用一樣 睡覺時候作業系統會切換cpu。

八核:八個cpu

多核任務分配:比如5個任務,四核,先乙個cpu分配乙個,然後先遇到i/o或者乙個程式占用時間過長

切換就新接乙個任務,然後i/o執行完畢,就切換到任意乙個空閒的cpu。

切換的時候先儲存進度,單核可以繼續切回來繼續執行程式

同乙個程式執行兩次,也是開啟了兩個程序。

二 、開啟子程序的兩種方式

os.cpu_count() 檢視電腦是幾個處理器

multiprocessing模組用來開啟子程序,並在子程序中執行我們定製的任務(比如函式),該模組與多執行緒模組threading的程式設計介面類似。

與執行緒不同,程序沒有任何共享狀態,程序修改的資料,改動僅限於該程序內。

子程序實現方式一(有注釋)

方式一是我們常用的

#

# # 方式一:

from multiprocessing import

process

import

time

deftask(x):

print('

%s is running

' %x)

time.sleep(3)

print('

%s is done

' %x)

if__name__ == '

__main__':

#process(target=task,kwargs=)

p=process(target=task,args=('

子程序',)) #

如果args=(),括號內只有乙個引數,一定記住加逗號

#target表示呼叫物件,即子程序要執行的任務,args是呼叫物件的位置引數元組。

p.start() #

只是在作業系統傳送乙個開啟子程序的訊號,作業系統會申請開闢乙個記憶體空間。

#然後把父程序的資料拷貝給子程序,作為子程序的初始狀態。

print('

主')

實現方式一

子程序實現方式二

#

方式二:

from multiprocessing import

process

import

time

class

myprocess(process):

def__init__

(self,x):

super().

__init__

() self.name=x

defrun(self):

print('

%s is running

' %self.name)

time.sleep(3)

print('

%s is done

' %self.name)

if__name__ == '

__main__':

p=myprocess('

子程序1')

p.start()

#p.run() # 自定義類向作業系統傳送乙個開啟子程序的訊號,作業系統會申請開闢乙個記憶體空間。

#然後把父程序的資料拷貝給子程序,作為子程序的初始狀態。

print('

主')

子程序實現方式二

同時開啟多個子程序

from multiprocessing import

process

import

time

deftask(x,n):

print('

%s is running

' %x)

time.sleep(n)

print('

%s is done

' %x)

if__name__ == '

__main__

': #

可以開啟多個子程序

#process(target=task,kwargs=)

p1 = process(target=task, args=('

子程序1

',3)) #

如果args=(),括號內只有乙個引數,一定記住加逗號

p2 = process(target=task, args=('

子程序2

',5)) #

如果args=(),括號內只有乙個引數,一定記住加逗號

p1.start() #

只是在作業系統傳送乙個開啟子程序的訊號

p2.start() #

只是在作業系統傳送乙個開啟子程序的訊號

print('

主')

多個子程序同時開啟

2 2 開啟程序的兩種方式

python中的多執行緒無法利用多核優勢,如果想要充分地使用多核cpu的資源 os.cpu count 檢視 在python中大部分情況需要使用多程序。python提供了multiprocessing。multiprocessing模組用來開啟子程序,並在子程序中執行我們定製的任務 比如函式 該模組...

python程序開啟的兩種方式

1.1 方式一from multiprocessing import process import time 方式一 def task name print f my name is 啟動時間 time.sleep 2 print f my name is 停止時間 if name main 1 建...

Python中建立程序的兩種方式以及程序池

在python中建立程序有兩種方式,第一種是 from multiprocessing import process import time def test while true print test time.sleep 1 if name main p process target test ...