首页 > 解决方案 > 索引/有序队列?

问题描述

我有一个多线程应用程序,每个线程都从串行/UART 接口接收数据。

我想在它们到达时按顺序打印数据,但是有些数据更长,有些更短并且使用read_until导致pyserial顺序混淆(几毫秒/纳秒)

我需要像 Queue 这样的东西,但它可以按顺序删除元素,以确保我不会混淆它们。

接收线程

  1. 收到数据包的第一个字节后,我可以“获取下一个数字”(一些线程安全操作)
  2. 然后我可以等到所有数据到达
  3. 然后我可以将整个“数据包”推入队列

消费者线程 只能根据顺序索引消费队列中的元素,例如。1 和 2 已处理,已经有 4 和 5 等待,但我从来没有得到 3 我必须等待它才能继续。

我不想重新发明轮子——这是一个我没有命名的结构还是有人知道类似的东西?

标签: pythonpython-3.xmultithreadingqueue

解决方案


据我所知,python标准库中没有这样的结构(类似于“有序优先队列”)。并且很可能您将不得不实现类似包装器之类的东西,PriorityQueue它可以跟踪项目的优先级,只允许以有序的方式提取,并缓冲其余部分。


推荐阅读