Python多線程多進程實例對比解析
多線程適合于多io操作
多進程適合于耗cpu(計算)的操作
# 多進程編程
# 耗cpu的操作,用多進程編程, 對于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操作,多進程優(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ōu)于多線程 2.6130592823028564 < 3.905290126800537
下面模擬一個io操作
# 多進程編程
# 耗cpu的操作,用多進程編程, 對于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操作,多進程優(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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
解決import tensorflow導致jupyter內(nèi)核死亡的問題
這篇文章主要介紹了解決import tensorflow導致jupyter內(nèi)核死亡的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
Python使用Selenium+BeautifulSoup爬取淘寶搜索頁
這篇文章主要為大家詳細介紹了Python使用Selenium+BeautifulSoup爬取淘寶搜索頁,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-02-02
在Python中操作列表之List.append()方法的使用
這篇文章主要介紹了在Python中操作列表之List.append()方法的使用,是Python入門學習中的基礎知識,需要的朋友可以參考下2015-05-05
在langchain中對大模型的輸出進行格式化實現(xiàn)
這篇文章主要為大家介紹了在langchain中對大模型的輸出進行格式化實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11
Python淘寶或京東等秒殺搶購腳本實現(xiàn)(秒殺腳本)
本篇文章主要介紹了Python 通過selenium實現(xiàn)毫秒級自動搶購的示例代碼,通過掃碼登錄即可自動完成一系列操作,搶購時間精確至毫秒,可搶加購物車等待時間結(jié)算的,也可以搶聚劃算、火車票等的商品,感興趣的朋友跟隨小編一起看看吧2022-10-10
typing.Dict和Dict的區(qū)別及它們在Python中的用途小結(jié)
當在 Python 函數(shù)中聲明一個 dictionary 作為參數(shù)時,我們一般會把 key 和 value 的數(shù)據(jù)類型聲明為全局變量,而不是局部變量。,這篇文章主要介紹了typing.Dict和Dict的區(qū)別及它們在Python中的用途小結(jié),需要的朋友可以參考下2023-06-06

