程序理論(book:現代作業系統)
為何開啟子程序需要放在main下面:因為執行到start他會向作業系統發起啟動子程序的訊號,然後作業系統會把整個**塊執行下,找到子程序要執行的任務,
**執行到最下面,又執行了start,又重複執行一次。執行緒可以不放在main下面是因為執行緒不用匯入主線程裡的東西,他們共享資源。
程序就是乙個正在執行的程式或者說是乙個程式的執行過程。
pid process id 程序在作業系統裡的身份證號序列、併發、並行、多道技術
併發實現的本質:切換 + 儲存狀態
時間復用:占用cpu過長或者有另外乙個優先順序更高的任務搶走cpui/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 ...