1. 线程与进程
进程是资源分配的最小单位,线程是CPU调度的最小单位。线程可以让应用程序并发的执行多个任务,线程之间方便共享资源,进程之间信息难以共享。
2. 线程与进程的区别
引用知乎大佬的比喻,进程=火车,线程=车厢:
- 线程在进程下进行(单纯的车厢无法运行)
- 一个进程可以包含多个线程(一辆火车可以有多个车厢)
- 不同进程之间的资源不容易共享,而一个进程下不同线程之间的资源容易共享(一辆火车换到另一辆火车不方便,需要站点等;而一个车厢换到另外一个车厢方便许多)
- 进程间不会相互影响,但是某个进程中的线程挂掉就有可能会影响整个进程(一节车厢起火可能会影响其他车厢,但是不会影响另一条轨道的火车)
- 进程使用的内存地址可以上锁,即一个线程使用某些共享内存时,其他线程必须等她结束,才能使用这一块内存 - “互斥锁” (比如车厢的洗手间)
- 进程使用的内存地址可以限定使用量(比如火车上的餐厅,最多允许多少人进入,如果满了要再门口等,有人出来了才能进去)- “信息量”
3. ThreadPoolExecutor线程池
简单使用
from concurrent.futures import ThreadPoolExecutor
import time
# 参数times用来模拟网络请求的时间
def get_html(times):
time.sleep(times)
print("get page {}s finished".format(times))
return times
executor = ThreadPoolExecutor(max_workers=2)
# 通过submit函数提交执行的函数到线程池中,submit函数立即返回,不阻塞
task1 = executor.submit(get_html, (3