Python多線程多進程實例對比解析
多線程適合于多io操作
多進程適合于耗cpu(計算)的操作
# 多進程編程# 耗cpu的操作,用多進程編程, 對于io操作來說,使用多線程編程import timefrom concurrent.futures import ThreadPoolExecutor, as_completedfrom concurrent.futures import ProcessPoolExecutordef fib(n): if n <= 2: return 1 return fib(n - 2) + fib(n - 1)if __name__ == ’__main__’: # 1. 對于耗cpu操作,多進程優(yōu)于多線程 # with ThreadPoolExecutor(3) as executor: # all_task = [executor.submit(fib, num) for num in range(25, 35)] # start_time = time.time() # for future in as_completed(all_task): # data = future.result() # print(data) # print('last time :{}'.format(time.time() - start_time)) # 3.905290126800537 # 多進程 ,在window環(huán)境 下必須放在main方法中執(zhí)行,否則拋異常 with ProcessPoolExecutor(3) as executor: all_task = [executor.submit(fib, num) for num in range(25, 35)] start_time = time.time() for future in as_completed(all_task): data = future.result() print(data) print('last time :{}'.format(time.time() - start_time)) # 2.6130592823028564
可以看到在耗cpu的應(yīng)用中,多進程明顯優(yōu)于多線程 2.6130592823028564 < 3.905290126800537
下面模擬一個io操作
# 多進程編程# 耗cpu的操作,用多進程編程, 對于io操作來說,使用多線程編程import timefrom concurrent.futures import ThreadPoolExecutor, as_completedfrom concurrent.futures import ProcessPoolExecutordef io_operation(n): time.sleep(2) return nif __name__ == ’__main__’: # 1. 對于耗cpu操作,多進程優(yōu)于多線程 # with ThreadPoolExecutor(3) as executor: # all_task = [executor.submit(io_operation, num) for num in range(25, 35)] # start_time = time.time() # for future in as_completed(all_task): # data = future.result() # print(data) # print('last time :{}'.format(time.time() - start_time)) # 8.00358772277832 # 多進程 ,在window環(huán)境 下必須放在main方法中執(zhí)行,否則拋異常 with ProcessPoolExecutor(3) as executor: all_task = [executor.submit(io_operation, num) for num in range(25, 35)] start_time = time.time() for future in as_completed(all_task): data = future.result() print(data) print('last time :{}'.format(time.time() - start_time)) # 8.12435245513916
可以看到 8.00358772277832 < 8.12435245513916, 即是多線程比多進程更牛逼!
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. .NET使用YARP通過編碼方式配置域名轉(zhuǎn)發(fā)實現(xiàn)反向代理2. 將properties文件的配置設(shè)置為整個Web應(yīng)用的全局變量實現(xiàn)方法3. Django 如何從request中獲取前端數(shù)據(jù)4. AJAX原理以及axios、fetch區(qū)別實例詳解5. javascript設(shè)計模式 ? 組合模式原理與應(yīng)用實例分析6. 使用FormData進行Ajax請求上傳文件的實例代碼7. javascript設(shè)計模式 ? 外觀模式原理與用法實例分析8. CSS可以做的幾個令你嘆為觀止的實例分享9. Ajax常用封裝庫——Axios的使用10. ASP.NET Identity的基本用法
