之前也提到过,现在有个需求,10秒抢购场景下需要用5个账号去购买,但由于调一次接口 查个SQL要3秒,5个用户要15秒,所以采用多线程,现在情况是调完接口要查SQL把结果拿出来对比产品给的需求的值,所以使用队列(Queue)
作用:
-
解耦:
使程序直接实现松耦合,修改一个函数,不会有串联关系。
提高处理效率:FIFO = 现进先出,LIFO = 后入先出。 -
队列:
队列可以并发的派多个线程,对排列的线程处理,并切每个需要处理线程只需要将请求的数据放入队列容器的内存中,线程不需要等待,当排列完毕处理完数据后,线程在准时来取数据即可。请求数据的线程只与这个队列容器存在关系,处理数据的线程down
掉不会影响到请求数据的线程,队列会派给其他线程处理这分数据,它实现了解耦,提高效率。队列内会有一个有顺序的容器,列表与这个容器是有区别的,列表中数据虽然是排列的,但数据被取走后还会保留,而队列中这个容器的数据被取后将不会保留。当必须在多个线程之间安全地交换信息时,队列在线程编程中特别有用。
多线程尽量使用Queue
而不是使用列表(list
),因为列表的pop()
和push()
效果看起来和和Queue的队列、栈一样,但list
不是线程安全的
因为涉及博主真实公司内部测试情况,所以有部分会打马赛克,请见谅
第一步,用pymysql封装为select_mysql,用requests封装为run_api,之前提到过这里就不多做阐述直接第二步
第二步: q_list = queue.Queue()
第三步:封装好 5个线程对应的函数名,里面会调一次购买接口,会查一次SQL并把结果设为变量select_mysql_result,num是产品要求的结果要 X 2倍 然后对比需求的数值
python 的 Queue 模块提供了一种适用于多线程编程的 FIFO 实现。它可用于在生产者和消费者之间线程安全地传递消息或其它数据,因此多个线程可以共用同一个 Queue 实例。
Queue 类实现了一个基本的先进先出(FIFO)容器,使用 put() 将元素添加到序列尾端,get() 从队列尾部移除元素。
第三步:使用队列
多线程操作之前已提到过本篇就不多做阐述,把5个结果写入run_data
第四步 直接按照产品的逻辑需求写 测试 逻辑:
第五步执行看测试结果:
最后一步就把测试结果数据放在测试平台里 或者 写入测试数据库里 就完事