python程序與執行緒,同步與非同步,並行併發

2021-08-27 08:15:57 字數 1587 閱讀 6608

from multiprocessing import process,pool

import os

import time

class

myprocess

(process):

def__init__

(self,wtime):

process.__init__(self)

self.wtime = wtime

defrun(self):

n = 0

while n<3:

print('子程序{}正在執行'.format(os.getpid())),'{}'.format(time.ctime())

time.sleep(self.wtime)

n +=1

if __name__ == '__main__':

p = myprocess(2)

p.daemon = true

# 守護程序(其父程序結束,子程序也直接終止執行)

p.start()

p.join() #它使子程序執行結束後,父程序才執行之後的**

print('正在執行的程序',p.pid)

print('程序結束,{}'.format(time.ctime()))

from multiprocessing import  process,pool

import os,time

defrun_proc

(name):

for i in range(5):

time.sleep(0.2)

print('執行子程序{}({})'.format(name,os.getpid()))

if __name__ == '__main__':

# os.getpid()獲取當前程序id os.getppid()獲取父程序id

print('執行主程序{}'.format(os.getpid()))

mainstart = time.time()

p = pool(8)

for i in range(16):

print('等待所有程序執行完')

p.close()

p.join()

print('所有程序已經執行完畢')

mainend = time.time()

print('所有程序執行的總時間是{}'.format(mainend-mainstart))

附加說明:這裡程序池對併發程序的限制數量為8個,而程式執行時會產生16個程序,程序池將自動管理系統內程序的併發數量,其餘程序將會在佇列中等待。限制併發數量是因為,系統中併發的程序不是越多越好,併發程序太多,可能使cpu大部分的時間用於程序排程,而不是執行有效的計算。

採用多程序併發技術時,就單個處理機而言,其對程序的執行是序列的。但具體某個時刻哪個程序獲得cpu資源而執行是不可預知的(如執行結果的開頭部分,各程序的執行順序不定),這就體現了程序的非同步性。

如果單個程式執行14次run_proc函式,那麼它會需要至少16秒,通過程序的併發,這裡只需要2.49秒,可見併發的優勢。

待續。。。

初探 程序通訊與執行緒同步

不推薦使用signal 介面,推薦使用sigacton 相關介面 訊號集處理函式 int sigemptyset sigset t set int sigfillset sigset t set int sigdelset sigset t set,int signo int sigmember s...

python執行緒與程序

直接呼叫 import threading,time def run n print running n time.sleep 2 t1 threading.thread target run,args test1 生成乙個執行緒例項 t2 threading.thread target run,a...

python 程序與執行緒

執行緒是作業系統能夠進行運算排程的最小單位,它包含在程序之中,是程序中的實際運作單位。一條執行緒指的是程序中乙個單一順序的控制流,乙個程序中可以併發多個執行緒,每條執行緒並行執行不 同的任務。程序 qq要以乙個整體的形式暴露給作業系統功能管理,裡面包含對各種資源的呼叫。記憶體對各種資源管理的集合 就...