多进程与多线程的比较:
python多线程只能运行在一个cpu内核,
对于耗费cpu的操作多进程优于多线程,
对于io操作多线程优于多进程。
分别用多进程和多线程实现一个耗费cpu的计算操作:
运行代码看到
多线程计算耗时39.59178113937378s
多进程计算耗时17.96556830406189s
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(5) as executor:
all_task = [executor.submit(fib, (num)) for num in range(25,40)]
start_time = time.time()
for future in as_completed(all_task):
result = future.result()
print("exec result is {} ".format(result))
print('thread time is ====> ',time.time() - start_time)
分别用多进程和多线程实现一个类似io的操作:
多进程计算耗时12.173911333084106
多线程计算耗时12.062113761901855
操作数据较大时,区别会更明显
from concurrent.futures import ProcessPoolExecutor
from concurrent.futures import ThreadPoolExecutor
import time
def random_sleep(n):
time.sleep(n)
return n
if __name__ == '__main__':
with ThreadPoolExecutor(5) as executor:
all_task = [executor.submit(random_sleep, (n)) for n in [2]*30]
start_time = time.time()
for future in as_completed(all_task):
result = future.result()
print("process exec result is {} ".format(result))
print('process time is ====>',time.time() - start_time)