前言
本文将和大家一起探讨python并发编程的实际项目:win图形界面应用(篇七,共八篇),系列文章将会从零开始构建项目,并逐渐完善项目,最终将项目打造成适用于高并发场景的应用。
本文为python并发编程的第二十五篇,上一篇文章地址如下:
python:并发编程(二十四)_Lion King的博客-CSDN博客
下一篇文章地址如下:
python:并发编程(二十六)_Lion King的博客-CSDN博客
一、并发测试
1、观测pycharm线程数(粗略观测)
(1)在没有运行测试协议客户端时,线程数为70
(2)运行客户端的线程数为79
(3) 打开客户端,线程数为74
(4)增加连接,线程数为77
(5)传输数据时,线程数为75
(6) 再次建立连接并发送数据,线程数为73
(7)将连续数量增加至10个,线程数量为72
(8)为什么上述线程数不是呈线性变化?
一些可能影响线程数量变化的因素包括:
(1)Python解释器的线程池机制:Python解释器可能使用线程池来管理线程,因此在执行线程任务时可能会重用已有的线程,而不会每次都创建新线程。这样可以提高线程的效率,但可能导致线程数量不会严格线性增加。
(2)操作系统的线程调度:操作系统负责线程的调度和管理,它可能会对线程的创建和销毁进行优化和调整。操作系统可能会合并或重用一些线程资源,或者根据实际情况动态调整线程池的大小,以提高系统的整体性能。
(3)其他线程或进程的影响:系统中可能同时运行着其他线程或进程,它们也会占用一定的资源。这些线程或进程的存在可能会影响到线程数量的变化,使其不是严格线性的。
因此,在你的测试中,虽然你建立了多个TCP连接,但线程数量的变化可能受到上述因素的影响,导致结果不是严格线性的。这是正常现象,不必过于担心。最重要的是确保你的应用程序在运行时具有预期的功能和性能。
2、线程数量精准观测
(1)在接收数据的地方增加线程数量打印
print(threading.active_count())
(2)观测到的数量变化
①建立TCP通信,并接受数据,此时的线程数为2,应该是主线程+1个TCP子线程
②后续每添加一个tab页,则新增加一个子线程,由此可见呈线性增加,也符合代码逻辑
这些数据说明我们的应用具备多线程并发的能力,目前实测至少支持10个客户端高并发,是能达到我目前的需求的。