python多线程和多进程对比
-
对于耗费CPU的操作,多进程优于多线程
多进程测试
from concurrent.futures import ThreadPoolExecutor,as_completed # 多线程
from concurrent.futures import ProcessPoolExecutor # 多进程
import time
def fib(n):
if n <= 2:
return 1
return fib(n-1)+fib(n-2)
if __name__ == "__main__":
with ProcessPoolExecutor(3) as executor:
all_task = [executor.submit(fib, (num)) for num in range(35,40)]
start_time = time.time()
for future in as_completed(all_task):
data = future.result()
print("exe result : {}".format(data))
print("last time is: {}".format(time.time()-start_time))
多线程测试
from concurrent.futures import ThreadPoolExecutor,as_completed # 多线程
from concurrent.futures import ProcessPoolExecutor # 多进程
import time
def fib(n):
if n <= 2:
return 1
return fib(n-1)+fib(n-2)
if __name__ == "__main__":
with ThreadPoolExecutor(3) as executor:
all_task = [executor.submit(fib, (num)) for num in range(35,40)]
start_time = time.time()
for future in as_completed(all_task):
data = future.result()
print("exe result : {}".format(data))
print("last time is: {}".format(time.time()-start_time))
-
对于IO操作来说,多线程优于多进程
多进程测试
from concurrent.futures import ThreadPoolExecutor,as_completed # 多线程
from concurrent.futures import ProcessPoolExecutor # 多进程
import time
def random_sleep(n):
time.sleep(n)
return n
if __name__ == "__main__":
with ProcessPoolExecutor(3) as executor:
all_task = [executor.submit(random_sleep, (num)) for num in [2]*30]
start_time = time.time()
for future in as_completed(all_task):
data = future.result()
print("exe result : {}".format(data))
print("last time is: {}".format(time.time()-start_time))
多线程测试
from concurrent.futures import ThreadPoolExecutor,as_completed # 多线程
from concurrent.futures import ProcessPoolExecutor # 多进程
import time
def random_sleep(n):
time.sleep(n)
return n
if __name__ == "__main__":
with ThreadPoolExecutor(3) as executor:
all_task = [executor.submit(random_sleep, (num)) for num in [2]*30]
start_time = time.time()
for future in as_completed(all_task):
data = future.result()
print("exe result : {}".format(data))
print("last time is: {}".format(time.time()-start_time))