1. 程式人生 > >PYTHON-進程 子進程

PYTHON-進程 子進程

*** 發送信號 無法 間隔 隔離 def pre tag 使用

1.多道技術  見上一節
空間復用
時間復用


並發
在同一個時間段內 發生的多個事情,本質是不停切換執行 多個進程隨機執行
並行
在同一時刻 同時進行多個事情(只有多核處理器才能真實並行)
串行
一個一個依次排隊執行
第一個任務沒執行完 第二個只能等待

阻塞 遇到i/o操作 看起來就是代碼卡主了 因為cpu被分配給其他進程
非阻塞 不會卡主代碼的執行 只要還擁有cpu的執行權 就不叫阻塞
阻塞 和非阻塞 說的是同一個進程的情況下

多線程後再議!
同步 一個調用必須獲得返回結果才能繼續執行
異步 一個調用發起後 發起方不需要等待它的返回結果

同步和異步 必須存在多個進程(線程)
無論是進程還是線程都是兩條獨立的執行路徑


思考:多核處理器 能不能真正的並行?
可以 每個核可以單獨負責一個任務 這些任務可以同時進行


2.python如何使用多進程 ******

1.直接創建Process對象 同時傳入要做的事情就是一個函數
2.創建一個類 繼承自Process 把要做的任務放在run方法中

1、創建進程的兩種方式
方式一:
from multiprocessing import Process

def task(name):
print(‘%s is running‘ %name)

if __name__ == ‘__main__‘:
obj=Process(taget=task,args=(‘egon‘,))
obj.start() # 發送信號給操作系統
print(‘主‘)
task(‘xxx‘)

方式二:
from multiprocessing import Process

class MyTask(Process):
def run(self):
print(‘%s is running‘ %self.name)

if __name__ == ‘__main__‘:
obj=MyTask()
obj.start() # 發送信號給操作系統

2、進程之間地址空間隔離

3.父進程與子進程間的執行順序 ******
主進程必然先執行
子進程應該在主進程執行後執行
一旦子進程啟動了 後續的順序就無法控制了

4、進程對象的常用屬性
obj.start() 開啟進程
obj.join(1) 父進程等待子進程

obj.terminate() 終止進程
obj.is_alive() 是否存活

obj.pid 獲取進程id
obj.name 進程名稱

5、僵屍進程與孤兒進程

僵屍進程:有害
  一個進程任務執行完就死亡了 但是操作系統不會立即將其清理

孤兒進程 無害!
沒有爹的稱為孤兒

PYTHON-進程 子進程