应用场景:不断消费一个容器里面的数据,使用同一个线程池,实现高可用性并减少系统性能开销;(这里拿redis作为容器来做示范),线程池的使用请查看https://www.cnblogs.com/hoojjack/p/10846010.html。
需求:程序开始前创建一个线程池,然后一直用这个线程池来运行程序,不销毁这个线程池,尽量高效的使用这个线程池;实现高可用性和节约内存的作用;
线程池消费原理:将任务都放在一个任务池A里面,然后等线程池里面的线程空闲了就分发给空闲的线程,然后线程的任务执行完毕后继续接任务;这就要控制一下接受任务的速度,如果无限循环的将任务写入任务池A里面,那么就会导致系统内存爆炸,例如迭代版本二实例;
主体程序:
import redis, time
from concurrent.futures import ThreadPoolExecutor
class Redis_demo(object):
def __init__(self):
self.redis_pool = redis.ConnectionPool(host='127.0.0.1', port=6379, db=0, decode_responses=True)
def consumer(self):
redis_client = redis.Redis(connection_pool=self.redis_pool)
data = redis_client.rpop("test_qly")
return data
<