gpt4 book ai didi

python - 线程之间的简单字节流是否需要 Python 队列?

转载 作者:太空宇宙 更新时间:2023-11-04 01:44:01 25 4
gpt4 key购买 nike

我有一个简单的线程,它从蓝牙 RFCOMM(类似串行端口)套接字中获取字节并将它们转储到 Queue.Queue (FIFO) 中,这似乎是交换数据的典型方法线程之间的数据。工作正常。

不过,这是矫枉过正吗?我可以只使用 bytearray 然后让我的阅读器线程 .append(somebyte) 和处理函数只是 .pop(0) 吗?我不确定 Queue 中的保护是否意味着更复杂的“多生产者、多消费者队列”和点对点字节流的浪费。与更简单的数据类型相比,使用 Queue 执行诸如刷新队列或获取多个字节之类的操作似乎更加笨拙。

我想答案可能与如果 .pop() 是原子的有关,但它甚至重要吗?...

最佳答案

使用 Queue,您保证在任何 Python 实现和版本中都是线程安全的。依赖某个其他对象的这种或那种方法是“原子的”(在给定的实现和版本中)通常会让您受制于这种“原子性”而不是强有力的保证(只是特定点发布的实现工件 &c 你正在使用),因此在任何升级或移植到其他 Python 实现时都会引入微妙的、非常难以调试的竞争条件。

如果您的分析告诉您Queue 的强大和通用保证正在成为您特定的生产者-消费者用例的瓶颈,请制作您自己的更简单的保证线程安全的 FIFO 队列/溪流。例如,如果您发现(不考虑竞争条件)appendpop 非常适合您使用,只需创建一个用锁保护每个的类acquire/release(使用 with 语句)——Queue 增加了极小的开销来支持多个生产者和消费者,您可以将那几纳秒的时间缩短!-)

关于python - 线程之间的简单字节流是否需要 Python 队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1640112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com