python进程之进程池、线程池与异步回调机制

2023-06-25,,

进程线程不可以无限制的创建,因为有硬件的限制。为了避免资源被程序消耗过度,可以使用进程池或线程池的技术。

    降低程序的执行效率,但是保证了计算机硬件的安全

进程池

    提前创建好固定数量的进程,供后续程序的调用,超出则进入等待状态

线程池

    提前创建好固定数据的线程,供后续程序的调用,超出则进入等待状态

PS:

    当一个程序计算数量的程序较多时,使用进程池。

    当一个程序I/O的程序较多时,使用线程池。

        (因为GIL锁的原因,每个进程中同一时间只能有一个进程链接cpu)

from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor
import os
import time
import random # 1. 产生含有固定数量线程的线程池
# t_pool = ThreadPoolExecutor() # 默认线程数(max_workers = min(32, (os.cpu_count() or 1) + 4))
t_pool = ThreadPoolExecutor(20) # 产生有20个线程的线程池
p_pool = ProcessPoolExecutor(5) def task():
print('task is running')
time.sleep(random.randint(1, 3))
print('task is over')
return 'task函数返回值' def func(a):
print(f'我拿到返回值了>>>:{a.result()}') # 2.将任务提交给线程池
for i in range(200): # 定义200个任务
t_pool.submit(task) # 将任务交给线程池 # 3. 将任务提交给进程池
# 执行过程中,可以按到程序是一波一波的运行,每一波就是你定义进程的数量
if __name__ == '__main__':
for i in range(20):
p_pool.submit(task) # 4.要获得函数运行结果的返回值
if __name__ == '__main__':
for i in range(20):
# 将task函数返回值传给func函数,func函数拿到返回值可以去干别的事去了
p_pool.submit(task).add_done_callback(func) # 异步回调机制

python进程之进程池、线程池与异步回调机制的相关教程结束。

《python进程之进程池、线程池与异步回调机制.doc》

下载本文的Word格式文档,以方便收藏与打印。