Python多執行緒多程序例項對比解析
阿新 • • 發佈:2020-03-13
多執行緒適合於多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操作,多程序優於多執行緒 # 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環境 下必須放在main方法中執行,否則拋異常 with ProcessPoolExecutor(3) as executor: all_task = [executor.submit(fib,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的應用中,多程序明顯優於多執行緒 2.6130592823028564 < 3.905290126800537
下面模擬一個io操作
# 多程序程式設計 # 耗cpu的操作,as_completed from concurrent.futures import ProcessPoolExecutor def io_operation(n): time.sleep(2) return n if __name__ == '__main__': # 1. 對於耗cpu操作,多程序優於多執行緒 # with ThreadPoolExecutor(3) as executor: # all_task = [executor.submit(io_operation,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 # 多程序,否則拋異常 with ProcessPoolExecutor(3) as executor: all_task = [executor.submit(io_operation,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,即是多執行緒比多程序更牛逼!
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。