Python: 如何使用pickle转储Queue对象?

Python: how to use pickle to dump Queue objects?

问题是直接使用pickle转储Queue会抛出异常。我读过这篇类似的 post 但还没有得到我的答案: Pickle Queue objects in python

我真的不能用collections.deque替换Queue,因为我是运行一个多线程程序,其中Queue用于同步。

那我该怎么做呢?

如果您需要在所有消费者和生产者线程终止后从 (一个且唯一的)主线程保存队列剩余内容,您只需转储您的队列到一个简单的列表 - 并使用 pickle 来保存该列表。

def qdumper(q):
    try:
        yield q.get(False)
    except queue.Empty:
        pass

remaining = [item for item in qdumper(my_queue)]
pickle.dump(remaining, ....)