非阻塞:(不需要等待)。
簡單來說就是開啟幾個程序就同時執行幾個程序。
比如下面程式,開啟3個程序,那麼程式一執行的時候立馬執行3個程序同時呼叫function方法,不需要等待程序1執行完在執行程序2。
from multiprocessing import lock, pool
import time
def function(index):
print('start process: ', index)
time.sleep(2)
print('end process', index)
if __name__ == '__main__':
pool = pool(processes=3)
for i in range(4):
print("started processes")
pool.close() #需要關閉程序池,防止池其他任務的提交,注意!這裡不是關閉程序。簡單來說就是關掉了屋外的大門,但是各個房間在執行。
pool.join() #等待程序池裡面的程序執行完
print("subprocess done.")
阻塞:(需要等待)。
簡單來說就是需要等待程序1結束之後才能執行程序2。
就算同時開啟3個程序,那麼也得等待乙個程序結束後才能執行下乙個。
from multiprocessing import lock, pool
import time
def function(index):
print('start process: ', index)
time.sleep(2)
print('end process', index)
if __name__ == '__main__':
pool = pool(processes=3)
for i in range(4):
print("started processes")
pool.close()
pool.join()
print("subprocess done.")
非阻塞優缺點優點:快速執行,不受限制。追求程式執行時速度快,對結果返回的快慢不影響的可以使用這種
缺點:輸出的結果可能雜亂,但子程序一定是執行完後才執行父程序,join()方法
下面是執行結果:
阻塞的優缺點:
優點:輸出結果順序合理,相當於加上了鎖和釋放鎖。對輸出結果比較看重的可以使用阻塞。
下面是執行結果
php 多程序程式設計父程序的阻塞與非阻塞例項分析
php中程序的阻塞,主要是父程序等待子程序退出。1.php 如下 define fork nums 5 用於儲存程序pid pids array 我們建立5個子程序 for i 0 i fork nums i else if pids i r n 我們讓子程序等待3秒,再退出 sleep 3 exi...
Python3之多程序join daemon
import os import time from multiprocessing import process,joinablequeue defproducer0 q for i in range 5 print s 生產了 s os.getpid i q.put i q.join defpr...
nginx 非同步非阻塞多程序模型
master程序負責 呼叫各module的初始化函式,讀取解析nginx配置檔案,模組module 解析執行 nginx.conf 配置檔案流程分析 充當整個程序組與使用者的互動介面,接收使用者操作訊號管理worker程序,nginx核心程序模型 worker程序負責 搶占程序鎖,從監聽套接字中獲取...