對多工程式設計的一些實現 基於Python

2022-06-25 16:42:09 字數 3272 閱讀 7057

以下內容如有錯誤請指出

什麼是程序?

程序: 程式在計算機中的一次執行,程式是靜態的,程序是動態的過程,具有一定的生命週期

程序的狀態

孤兒程序: 父程序先於子程序退出,子程序成為了孤兒

殭屍程序: 子程序先於父程序退出,但是父程序未處理子程序的退出狀態,子程序成為了殭屍

殭屍程序的3種解決辦法

1.使用os.wait()來阻塞父程序,等待父程序處理子程序的退出狀態

import os, sys, time

pid = os.fork()

if pid < 0:

print("建立子程序失敗")

elif pid == 0:

print("子程序空間")

time.sleep(0.5)

sys.exit(0)

else:

while true:

pid, status = os.wait()

print("父程序空間")

print(os.getgid(), pid, status)

break

2. 建立二級子程序處理殭屍程序,子程序建立二級子程序後退出,此時二級子程序變為孤兒程序,收歸到系統程序

import os, sys

pid = os.fork()

if pid < 0:

print("建立子程序失敗")

elif pid == 0:

print("子程序空間")

cpid = os.fork()

if cpid < 0:

print("建立二級子程序失敗")

elif cpid == 0:

print("二級子程序空間")

else:

sys.exit(0)

else:

os.wait()

print("父程序空間")

3. 通過訊號處理子程序退出

signal.signal(signal.sigchld,signal.sig_ign)

python多程序程式設計方法

1. mutilprocessing建立程序,join阻塞等待子程序退出

import os

from multiprocessing import process

def run():

print(f"working..., , ")

pool =

for _ in range(5):

process = process(target=run)

process.start()

for process in pool:

process.join()

2. pool程序池機制

import os, time, random

from multiprocessing import pool

def run():

print(f"working..., , ")

time.sleep(random.random())

pool = pool(2)

for _ in range(5):

pool.close()

pool.join()

3. processpoolexecutor程序池機制

import os

from concurrent.futures import processpoolexecutor

def run(msg):

print(f"working..., , , ")

with processpoolexecutor(max_workers=2) as exec:

exec.map(run, [i for i in range(5)])

程序間通訊

由於程序空間互相獨立,資源不共享,此時在程序間傳輸資料需要特定的手段進行資料通訊

程序間通訊的幾種方法: 訊號,訊號量,訊息佇列,管道,共享記憶體,套接字

**待續...

什麼是執行緒?

執行緒: 是程序的子任務,是一種多工程式設計方式,是系統分配核心的最小單元

python多執行緒程式設計方法

1. threading建立程序,join阻塞等待子程序退出

from threading import thread

def run():

print(f"working...")

pool =

for _ in range(5):

thread = thread(target=run)

thread.start()

for thread in pool:

thread.join()

2.  threadpoolexecutor執行緒池機制

from concurrent.futures import threadpoolexecutor

def run(msg):

print(f"working..., ")

with threadpoolexecutor(max_workers=2) as exec:

exec.map(run, [i for i in range(5)])

執行緒間通訊

由於多個執行緒共享乙個資源,資料處理不好便會混亂

執行緒間通訊的方法: 執行緒鎖,執行緒的event

**待續...

python的gil

gil: python直譯器設計中加入了直譯器鎖,導致直譯器同一時刻只能解釋執行乙個執行緒,大大降低了執行緒的執行效率

後果: 無阻塞狀態下,多執行緒效率和單執行緒幾乎差不多

gil問題建議: 盡量使用程序完成無阻塞的並發行為,不使用c作為直譯器

程序和執行緒的相關總結

使用場景

關於iOS多工的一些掃盲

打從這世界出現了作業系統以來,就沒有過所謂真正的 多工 所謂多工,無非是cpu速度夠快而足以支撐極短時間內在多個程序內動作罷了。而所謂的 單任務 無非是只能讓當前任務獨享資源罷了。1.儲存現場。按下home鍵10秒內直接殺死程序,並釋放記憶體。2.ios支援的 多工 按下home鍵轉入多工狀態,保留...

對程式設計的一些思考

1.程式 是程式設計思想的體現 我想程式設計人員在設計程式之初,肯定會有一番思考。思考主要是程式設計的目的,然後是實現目的的方法,最後才是 的實現。所以,程式 是程式設計思想的體現。分析 的啟示 我們分析程式 時,可以在看 之前,想想這個 要幹什麼事,然後再去看 就容易多了。程式設計的啟示 先思考程...

對程式設計的一些感悟總結

如果您想學習電腦程式設計,卻又不知從何入手,那麼您不妨看看下面的幾種學習方案,可能會給您一些啟示吧!方案一 basic語言 visual basic 優點 1 basic 簡單易學,很容易上手。2 visual basic 提供了強大的視覺化程式設計能力,可以讓你輕鬆地做出漂亮的程式。3 眾多的控制...