1. 程式人生 > 程式設計 >Python多執行緒多程序例項對比解析

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操作,多程序優於多執行緒

  # 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,即是多執行緒比多程序更牛逼!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。