添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
4分钟

前言

最近在用 Pyside2 写机器人的上位机项目时,遇到了一个需要用到优先级队列的场景

服务端 的情况特殊,只能维持一个长连接,监听一个 TCP 活动端口,因此一次只能响应一个命令请求

所以“ 客户端 ”这边,只能有一个线程去和“ 服务端通信

因此根据设备的情况,和业务的需要,设计了如下的程序框架:

程序框架

那么,优先级队列,怎么发挥他的作用呢?

优先级队列

简单介绍一下 python 中优先级队列

PriorityQueue 是Python标准库 queue 模块中的一个类,它实现了一个优先队列。

优先队列中的每个元素都有一个优先级,优先级最高(数值最小)的元素最先出队。

在Python中,我们可以使用 PriorityQueue 类的 put() 方法添加元素,使用 get() 方法获取并删除优先级最高的元素。

以下是一个简单的例子:

在这个例子中, 'eat' 有最高的优先级(1),所以它会被最先打印出来。

用起来吧!

数字的大小,代表这个对象的,在队列中,被取出时的优先级,越小越优先(VIP)

数字可以是 浮点数 ,例如: 0.5 1 1.5 …

运行代码,效果如下:

可能存在的问题

优先级的队列机制也不是万能的

如果服务端,出现异常,或者没能及时处理完队列中的命令

所以,上面的代码,是可能会导致客户端内存的不断增加的!

因此需要限制队列的大小,以及生产者的发送能力,尽量避免无法控制的情况发生

修改一下刚刚的代码:

运行一下,看看队列中命令,是否被控制在 10 个之内~

好了,可以暂时歇会了)

怎么处理返回的命令呢?返回的命令如何赋予优先级呢?

不管了,明天再说吧。