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, ....)
问题是直接使用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, ....)