Python的多程序

2021-10-03 03:03:47 字數 2848 閱讀 1061

什麼是程序:

程序是乙個動態過程的描述,占有計算機的資源,有一定的生命週期。同乙個程式的不同執行過程是不同的程序,占用資源和生命週期都不一樣。(分清程式與程序的區別)

程序的特徵:

多程序的優缺點:

要實現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...