Python多線程多進(jìn)程實(shí)例對比解析
多線程適合于多io操作
多進(jìn)程適合于耗cpu(計(jì)算)的操作
# 多進(jìn)程編程
# 耗cpu的操作,用多進(jìn)程編程, 對于io操作來說,使用多線程編程
import time
from concurrent.futures import ThreadPoolExecutor, as_completed
from concurrent.futures import ProcessPoolExecutor
def fib(n):
if n <= 2:
return 1
return fib(n - 2) + fib(n - 1)
if __name__ == '__main__':
# 1. 對于耗cpu操作,多進(jìn)程優(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
# 多進(jìn)程 ,在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)用中,多進(jìn)程明顯優(yōu)于多線程 2.6130592823028564 < 3.905290126800537
下面模擬一個io操作
# 多進(jìn)程編程
# 耗cpu的操作,用多進(jìn)程編程, 對于io操作來說,使用多線程編程
import time
from concurrent.futures import ThreadPoolExecutor, as_completed
from concurrent.futures import ProcessPoolExecutor
def io_operation(n):
time.sleep(2)
return n
if __name__ == '__main__':
# 1. 對于耗cpu操作,多進(jìn)程優(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
# 多進(jìn)程 ,在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, 即是多線程比多進(jìn)程更牛逼!
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python多進(jìn)程與多線程的使用場景詳解
- Python之多進(jìn)程與多線程的使用
- python多線程和多進(jìn)程關(guān)系詳解
- Python 多進(jìn)程、多線程效率對比
- Python全局鎖中如何合理運(yùn)用多線程(多進(jìn)程)
- python線程安全及多進(jìn)程多線程實(shí)現(xiàn)方法詳解
- Python實(shí)現(xiàn)多線程/多進(jìn)程的TCP服務(wù)器
- python多線程與多進(jìn)程及其區(qū)別詳解
- 處理python中多線程與多進(jìn)程中的數(shù)據(jù)共享問題
- Python2.7實(shí)現(xiàn)多進(jìn)程下開發(fā)多線程示例
- python 多進(jìn)程和多線程使用詳解
相關(guān)文章
python第三方庫easydict的使用實(shí)例詳解
在?Python?中當(dāng)我們需要訪問字典中的元素的時候,我們需要使用類似?a['example']?的形式來進(jìn)行使用,這個時候就可以使用 easydict 這個模塊了,今天通過本文給大家講解python第三方庫easydict的使用,感興趣的朋友跟隨小編一起看看吧2022-11-11
django使用haystack調(diào)用Elasticsearch實(shí)現(xiàn)索引搜索
這篇文章主要介紹了django使用haystack調(diào)用Elasticsearch實(shí)現(xiàn)索引搜索,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-07-07
python opencv minAreaRect 生成最小外接矩形的方法
這篇文章主要介紹了python opencv minAreaRect 生成最小外接矩形的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-07-07
pyqt5 使用label控件實(shí)時顯示時間的實(shí)例
今天小編就為大家分享一篇pyqt5 使用label控件實(shí)時顯示時間的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
python實(shí)現(xiàn)跨excel sheet復(fù)制代碼實(shí)例
這篇文章主要介紹了python實(shí)現(xiàn)跨excel sheet復(fù)制代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03
Python使用type動態(tài)創(chuàng)建類操作示例
這篇文章主要介紹了Python使用type動態(tài)創(chuàng)建類操作,結(jié)合實(shí)例形式詳細(xì)分析了Python使用type動態(tài)創(chuàng)建類的具體原理、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下2020-02-02
python 實(shí)現(xiàn)客戶端與服務(wù)端的通信
這篇文章主要介紹了python 實(shí)現(xiàn)客戶端與服務(wù)端的通信的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12
python中類的輸出或類的實(shí)例輸出為<__main__類名 object at xxxx>這種形式的原因
在本篇文章里小編給大家分享了關(guān)于python中類的輸出或類的實(shí)例輸出為何是<__main__類名 object at xxxx>這種形式,需要的朋友們可以參考下。2019-08-08

