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要以乙個整體的形式暴露給作業系統功能管理,裡面包含對各種資源的呼叫。記憶體對各種資源管理的集合 就...