python 多工程式設計 程序

2021-10-06 15:44:17 字數 4680 閱讀 8596

程序

想要實現多工可以使用程序來完成,概念:

乙個正在執行的程式或者軟體就是乙個程序,它是作業系統進行資源發呢排的基本單位

乙個程式執行後至少有乙個程序,乙個程序預設有乙個執行緒,程序裡面可以建立多個執行緒,執行緒依附在程序裡面的,沒有程序就沒有執行緒。

程序的使用:

1、匯入程序包

import multiprocessing

2、process 程序類的說明

process([group[,target[,name[,args[,kwargs]]]]])

process 建立的例項物件的常用方法:

process 建立的例項物件的常用屬性:

name :當前程序的別名,預設為process-n,n為從1開始遞增的整數

3、多程序完成多工的**示例

# 定義跳舞的任務函式

def dance():

for i in range(3):

print("跳舞中。。。")

time.sleep(0.2)

# 定義唱歌的任務函式

def sing():

for i in range(3):

print("唱歌中。。。")

time.sleep(0.2)

# 判斷是否是主模組

if __name__ == "__main__":

dance()

sing()

執行結果:

跳舞中。。。

跳舞中。。。

跳舞中。。。

唱歌中。。。

唱歌中。。。

唱歌中。。。

改為多程序程式設計:

# 1、匯入程序包 multiprocessing

import multiprocessing

import time

import os

# 定義跳舞的任務函式

def dance():

for i in range(3):

print("跳舞中。。。")

time.sleep(0.2)

# 定義唱歌的任務函式

def sing():

for i in range(3):

print("唱歌中。。。")

time.sleep(0.2)

# 判斷是否是主模組

if __name__ == "__main__":

# 建立程序物件

# group:程序組,目前只能使用none,一般不管它

# target: 指定執行的任務名

sub_process1 = multiprocessing.process(target=dance)

sub_process2 = multiprocessing.process(target=sing)

# 啟動程序執行對應的任務

sub_process1.start()

sub_process2.start()

執行結果:

跳舞中。。。

唱歌中。。。

跳舞中。。。

唱歌中。。。

跳舞中。。。

唱歌中。。。

獲取程序編號

獲取程序編號的目的是驗證主程序和子程序的關係,可以得知子程序是由哪個主程序建立出來的,獲取程序編號有兩種操作:

1、獲取當前程序編號 os.getpid()

2、獲取當前父程序編號 os.getppid()

3、獲取當前**的程序物件:multiprocessing.current_process()

**示例如下:

# 1、匯入程序包 multiprocessing

import multiprocessing

import time

import os

# 定義唱歌的任務函式

def sing():

sing_process = multiprocessing.current_process()

print("sing_proces_name",sing_process) #獲取唱歌任務的程序名

print("sing_process_pid",os.getpid()) # 獲取唱歌程序的id

print("sing_process_ppid", os.getppid()) # 獲取唱歌父程序的id

for i in range(3):

print("唱歌中。。。")

time.sleep(0.2)

# 判斷是否是主模組

if __name__ == "__main__":

main_process = multiprocessing.current_process()

print("main_process",main_process)

print("main_process_id",os.getpid())

# 建立程序物件

# group:程序組,目前只能使用none,一般不管它

# target: 指定執行的任務名

sub_process1 = multiprocessing.process(target=sing)

print("sub_process1",sub_process1)

# 啟動程序執行對應的任務

sub_process1.start()

執行結果

main_process <_mainprocess(mainprocess, started)>

main_process_id 8696

sub_process1 sing_proces_name sing_process_pid 2568

sing_process_ppid 8696

唱歌中。。。

唱歌中。。。

唱歌中。。。

由執行結果可知,sing 子程序是由main主程序建立的

程序執行帶有引數的任務示例:

注:args:表示以元組方式給執行任務傳引數,實際上是按照函式位置引數傳參的。

kwargs:表示以字典方式給執行任務傳引數,實際上是按照函式關鍵字傳參的。

# 定義唱歌的任務函式

def sing(name,count):

print("誰將唱歌了?",name)

for i in range(count):

print("唱歌中。。。")

time.sleep(0.2)

對應的元組和字典傳參方式:

sub_process1 = multiprocessing.process(target=sing,args=("張三",2))

sub_process1 = multiprocessing.process(target=sing, kwargs=)

程序的注意點:

1、程序之間不共享全域性變數

2、主程序會等待所有的子程序執行結束後再結束

示例如下:

import multiprocessing

import time

import os

# 定義全域性變數

all_list = list()

# 定義新增資料

def add_list():

for i in range(3):

print("資料新增完畢:",all_list)

# 讀取資料

def read_list():

print("read:",all_list)

# 判斷是否是主模組

if __name__ == "__main__":

# 定義新增資料程序

sub_process1 = multiprocessing.process(target=add_list)

# 定義讀取資料程序

sub_process2 = multiprocessing.process(target=read_list)

# 啟動程序執行對應的任務

sub_process1.start()

# 程序等待 join,主程序會等待子程序(sub_process1)執行完以後再執行下面的**

sub_process1.join()

sub_process2.start()

print("主程序中的all_list",all_list)

執行結果如下:

資料新增完畢: [0, 1, 2]

主程序中的all_list

read:

結果表明程序之間不共享全域性變數,子程序其實是主程序的乙個副本

注:預設主程序會等待所有的子程序執行完後再退出,若要主程序結束時就結束子程序,有兩種方式可以解決

1、手動讓子程序銷毀

sub_process1.terminate()

2、設定子程序守護主程序,主程序退出時子程序就銷毀,停止執行

sub_process1.daemon= true

python 多工 程序

什麼是程序?程式是靜態的,當程式執行起來就叫做程序。程序是作業系統分配資源的基本單元。程序 執行緒的區別與優缺點 1.定義的不同 程序是系統進行資源分配的最小單位.執行緒是程序的乙個實體,是cpu進行排程的基本單位。執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源 如程式計數器,一組...

python 多工程式設計

多工 在同一時間內執行多個任務 多工的目的 多工的最大好處是充分利用cpu資源,提高程式的執行效率 併發 在一段時間內交替執行多個任務 並行 在同一時刻同時執行多個任務 程序 執行中的程式,分配資源的最小單位 執行緒 使用資源的最小單位 程序和執行緒的關係 乙個程式執行後至少有乙個程序,每個程序預設...

Python多工之程序

python通過多程序實現多工的幾種方法 只用在類unix linux系統中有效,windows系統中無效 fork函式呼叫一次,返回兩次 在父程序中返回值為子程序id,在子程序中返回值為0 import os ret os.fork if ret 父程序 print 主程序,pid format ...