gpt4 book ai didi

python - 在线程队列上执行多个操作的正确方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 03:47:12 24 4
gpt4 key购买 nike

我需要对 queue.Queue 执行一组操作,特别是遍历它并打包重复的连续元素。我还想确保在这组操作期间只有一个线程访问队列。我看到 Queue 对象有一个互斥锁,但我也假设它是为了让队列在其自己的操作期间执行锁定。拥有另一个互斥锁并不能保证队列不会同时被另一个线程访问,除非我组织我的代码来锁定第二个互斥锁。

为了安全地执行这些操作,是否有我不知道的技巧?

最佳答案

为此目的使用 Queue 对象的互斥体。它的存在正是为了同步对底层队列的修改。

也许子类化并添加一个方法(如 https://stackoverflow.com/a/7641976/132382 中的方法)以在 self.queue 中打包连续的重复项?

或者,我认为更好的方法是,子类化 queue.Queue 并覆盖 _put,以便在将连续的重复项添加到队列后立即对其进行处理。 _put 的调用已经受互斥保护(_put_get 等标准子类如 LifoQueue 的实现方式):

class PackedQueue(queue.Queue):

def _put(self, item):
if item != self.queue[-1]:
self.queue.append(item)

关于python - 在线程队列上执行多个操作的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23159187/

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