什麼是程序:
程序是乙個動態過程的描述,占有計算機的資源,有一定的生命週期。同乙個程式的不同執行過程是不同的程序,占用資源和生命週期都不一樣。(分清程式與程序的區別)
程序的特徵:
多程序的優缺點:
要實現python的多程序,有兩種方法:
pid = os.fork()
重點:
先來看看**:
import os
pid = os.fork(
)if pid <0:
print
("create process failed"
)elif pid ==0:
#在子程序中獲取子程序的pid
print
("child get pid:"
,os.getpid())
#在子程序中獲取父程序的pid
print
('child get parent pid:'
,os.getppid())
else
:# 在父程序中獲取子程序的pid
print
("parent get child pid:"
,pid)
# 在父程序中獲取父程序的pid
print
("parent get pid:"
,os.getpid(
))
呼叫fork函式,就會生成乙個子程序,同時在父程序中返回子程序的pid(程序id),並且該pid一定是大於0的,而在子程序中,如果沒有再產生子子程序(子程序的子程序),那麼子程序中獲得的pid是0,代表在子程序中沒有產生子程序,而如果返回的pid小於0,則表示建立程序失敗。這樣看**就很好理解了,在父程序中建立了乙個子程序,同時獲得了子程序的pid,所以,該pid一定是大於0的,所以在父程序中執行的是else分支(pid>0),而在子程序中,獲得的pid則是0,所以在子程序中執行的是pid=0的分支,而如果pid小於0,則表示程序建立失敗。
執行結果:
gk@gk-vm:~/python$ python3 fork_test2.py
parent get child pid: 54001
child get pid: 54001
child get parent pid: 54000
parent get pid: 54000
fork只能在unix/linux上使用,而在windows上不能使用,因此可以使用multiprocessing這個跨平台的多程序模組。
重點:
來看看**:
from multiprocessing import process
from time import sleep
import os
deftest1()
: sleep(2)
print
("程序1"
)print
("父程序pid:"
,os.getppid(),
',子程序pid:'
,os.getpid())
deftest2()
: sleep(3)
print
("程序2"
)print
("父程序pid:"
,os.getppid(),
',子程序pid:'
,os.getpid())
deftest3()
: sleep(4)
print
("程序3"
)print
("父程序pid:"
,os.getppid(),
',子程序pid:'
,os.getpid())
test =
[test1,test2,test3]
process =
for te in test:
p = process(target = te)
p.start(
)#迴圈**程序
for i in process:
i.join(
)
在這裡建立了三個子程序,然後三個子程序並行執行,執行完成後進行程序**。
執行結果:
gk@gk-vm:~/python$ python3 process1.py
程序1父程序pid: 55788 ,子程序pid: 55789
程序2父程序pid: 55788 ,子程序pid: 55790
程序3父程序pid: 55788 ,子程序pid: 55791
其中:
process()
p.start()
p.join([timeout])
另外還有乙個沒有用到的屬性:
p.daemon
注意:
那什麼是殭屍程序呢?
殭屍程序:子程序先於父程序退出,但是父程序沒有處理子程序的退出狀態,此時子程序就會成為殭屍程序。殭屍程序會存留少量pcb資訊在記憶體中,大量的殭屍程序會消耗系統資源,應該避免殭屍程序產生。
說到了殭屍程序,又要說說孤兒程序。
孤兒程序:父程序先於子程序退出,此時子程序就稱為孤兒程序。孤兒程序會被作業系統指定的程序收養,系統程序就成為孤兒程序的新的父程序。
綜上:應該避免殭屍程序的產生,而孤兒程序沒有影響。
python多程序 python多程序
當有多個非相關任務需要處理時,並行能大大提高處理速度。這裡簡要介紹python的multiprocessing模組。簡單多程序編寫 當我們任務數量確定而且比較少的時候,可以手動為每個任務指定乙個程序來執行。import multiprocessing as mp def f a print a if...
python多程序的坑 Python多程序相關的坑
python的multiprocessing模組實現了多程序功能,但官方文件上只有一些比較簡單的用法,主要是使用函式作為process的target,而如何在class中使用多程序並沒有多講解。google出兩篇比較詳細的文章,建議從它們入門 下面記錄一下自己這週在python多程序上碰到的坑 建立...
python多程序 Python多程序實踐
建立程序方式如下 可以通過lock鎖機制實現共享鎖,但比較常用的方式還是以上這些方式,效率更高,更安全。使用方式 構造 類方法 使用方式 構造 更多型別支援一般使用manager,支援的型別包括list,dict,namespace,lock,rlock,semaphore,boundedsemap...