redis线程方面的问题
来源:2-11 课堂练习:模拟商品秒杀活动案例(二)
小慕0436321
2019-08-18 00:57:31
老师, 你的那个教程里面不是有200个线程吗, 那这么多线程在for i in range(0, 1000):
executor.submit(buy)在情况下, 肯定会有这200个线程都有connection = redis.Redis(
connection_pool=pool
)连接,那么在怎么多不同的线程中在每个线程都有connection客户端,那么这么多的connection客户端是同时执行,还是按照顺序执行, 如果同时执行, 那么redis的单线程就说不同了呀, 如果按顺序执行, 那么怎么会出现Watched variable changed,因为一个个执行, 所以不可能会导致其他客户端修改了watch中的key。
1回答
慕之熠_灿烈
2019-08-19
同学,你好。
针对本问题,首先需要明确两个概念:(1)当把线程任务提交给Python的线程池之后,关于线程的“管理权”也就交给了线程池来自动管理;(2)Redis是利用单线程技术的非关系型数据库。
线程池的任务是并发执行的,当一个线程执行完毕后或因阻塞性任务而让出CPU的使用权后,会马上执行另一个的线程,这种执行原则是无序的,类似与Python的多线程,当一个线程执行完毕后会返回对应线程的执行结果(该结果是Future类型,了解即可)。正因为并发执行线程池中的任务,所以在Redis中事务管理需要对目标数据进行“监视”,即:“Watched variable changed”,从而有效的避免其他线程对目标数据进行“非法”修改。
如果我的回答解决了您的疑惑,请采纳!祝~学习愉快~
相似问题