初識多程序

2022-02-25 17:34:50 字數 2560 閱讀 9838

程序:程序(process)是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎

狹義定義:程序是正在執行的程式的例項(an instance of a computer program that is being executed)。

廣義定義:程序是乙個具有一定獨立功能的程式關於某個資料集合的一次執行活動。它是作業系統動態執行的基本單元,在傳統的作業系統中,程序既是基本的分配單元,也是基本的執行單元。

概念理解:

並行:並行是指兩者同時執行,比如賽跑,兩個人都在不停的往前跑

併發:併發是指資源有限的情況下,兩者交替輪流使用資源,比如一段路(單核cpu資源)同時只能過乙個人,a走一段後,讓給b,b用完繼續給a ,交替使用,目的是提高效率。

同步:同步就是乙個任務的完成需要依賴另外乙個任務時,只有等待被依賴的任務完成後,依賴的任務才能算完成,這是一種可靠的任務序列。要麼成功都成功,失敗都失敗,兩個任務的狀態可以保持一致。

非同步:所謂非同步是不需要等待被依賴的任務完成,只是通知被依賴的任務要完成什麼工作,依賴的任務也立即執行,只要自己完成了整個任務就算完成了。至於被依賴的任務最終是否真正完成,依賴它的任務無法確定,所以它是不可靠的任務序列

阻塞、非阻塞:這兩個概念與程式(執行緒)等待訊息通知(無所謂同步或者非同步)時的狀態有關。也就是說阻塞與非阻塞主要是程式(執行緒)等待訊息通知時的狀態角度來說的

非同步操作是可以被阻塞住的,只不過它不是在處理訊息時阻塞,而是在等待訊息通知時被阻塞。

python中程序的建立:

process模組是乙個建立程序的模組,借助這個模組,就可以完成程序的建立。

process([group [, target [, name [, args [, kwargs]]]]]),由該類例項化得到的物件,表示乙個子程序中的任務(尚未啟動)

強調:1. 需要使用關鍵字的方式來指定引數

2. args指定的為傳給target函式的位置引數,是乙個元組形式,必須有逗號

引數介紹:

group引數未使用,值始終為none

target表示呼叫物件,即子程序要執行的任務

args表示呼叫物件的位置引數元組,args=(1,2,'egon',)

kwargs表示呼叫物件的字典,kwargs=

name為子程序的名稱

p.start():啟動程序,並呼叫該子程序中的p.run() 

p.run():程序啟動時執行的方法,正是它去呼叫target指定的函式,我們自定義類的類中一定要實現該方法

p.terminate():強制終止程序p,不會進行任何清理操作,如果p建立了子程序,該子程序就成了殭屍程序,使用該方法需要特別小心這種情況。如果p還儲存了乙個鎖那麼也將不會被釋放,進而導致死鎖

p.is_alive():如果p仍然執行,返回true

p.join([timeout]):主線程等待p終止(強調:是主線程處於等的狀態,而p是處於執行的狀態)。timeout是可選的超時時間,需要強調的是,p.join只能join住start開啟的程序,而不能join住run開啟的程序

方法介紹

p.daemon:預設值為false,如果設為true,代表p為後台執行的守護程序,當p的父程序終止時,p也隨之終止,並且設定為true後,p不能建立自己的新程序,必須在p.start()之前設定

p.name:程序的名稱

p.pid:程序的pid

p.exitcode:程序在執行時為none、如果為–n,表示被訊號n結束(了解即可)

p.authkey:程序的身份驗證鍵,預設是由os.urandom()隨機生成的32字元的字串。這個鍵的用途是為涉及網路連線的底層程序間通訊提供安全性,這類連線只有在具有相同的身份驗證鍵時才能成功(了解即可)

屬性介紹

注意事項:

在windows作業系統中由於沒有fork(linux作業系統中建立程序的機制),在建立子程序的時候會自動 import 啟動它的這個檔案,而在 import 的時候又執行了整個檔案。

因此如果將process()直接寫在檔案中就會無限遞迴建立子程序報錯。所以必須把建立子程序的部分使用if __name__ ==『__main__』 判斷保護起來,import 的時候 ,就不會遞迴執行了。

建立程序

import time

from multiprocessing import process

def f(name):

print('hello', name)

print('我是子程序')

if __name__ == '__main__':

p = process(target=f, args=('bob',))

p.start()

time.sleep(1)

print('執行主程序的內容了')

在python中啟動的第乙個子程序

多程序 多程序queue

多程序 import multiprocessing import threading import time defthread run print threading.get ident defrun name time.sleep 2 print hello name t threading....

python多程序 python多程序

當有多個非相關任務需要處理時,並行能大大提高處理速度。這裡簡要介紹python的multiprocessing模組。簡單多程序編寫 當我們任務數量確定而且比較少的時候,可以手動為每個任務指定乙個程序來執行。import multiprocessing as mp def f a print a if...

PHP多程序 4 內部多程序

說的都是只相容unix 伺服器的多程序,下面來講講在window 和 unix 都相容的多程序 這裡是泛指,下面的curl實際上是通過io復用實現的 通過擴充套件實現多執行緒的典型例子是curl,curl 支援多執行緒的抓取網頁的功能。這部分過於抽象,所以,我先給出乙個curl並行抓取多個網頁內容的...