這是 Python 3.10。我使用 aPriorityQueue作為一種在我的游戲中跟蹤演員的回合順序的方法。這只是一個簡單的roguelike。我不使用PriorityQueue. 我的代碼:
import pickle
from queue import PriorityQueue
class GameEngine():
def __init__(self):
self.pqueue = PriorityQueue()
def save_to_file(self):
with open('save.pkl', 'wb') as file:
pickle.dump(self, file, pickle.HIGHEST_PROTOCOL)
class Monster():
pass
engine = GameEngine()
orc1 = Monster()
orc2 = Monster()
engine.pqueue.put((20,orc1))
engine.pqueue.put((10,orc2))
engine.save_to_file()
它回傳TypeError: cannot pickle '_thread.lock' object。據我了解,PriorityQueue 不可腌制。我在這里讀過,如果不需要同步的東西,它Queue.Queue有一個可腌制的替代方案。collections.deque有沒有這樣的替代品PriorityQueue,還是有辦法腌制它?除了實作我自己的簡化版本PriorityQueue?
uj5u.com熱心網友回復:
由于您不需要 PriorityQueue 的同步功能,只需使用輕量級heapq模塊即可。它提供了在普通串列上作業的函式(不是方法):
import pickle
from heapq import heappush, heappop
class GameEngine():
def __init__(self):
self.pqueue = []
def save_to_file(self):
with open('save.pkl', 'wb') as file:
pickle.dump(self, file, pickle.HIGHEST_PROTOCOL)
class Monster():
pass
engine = GameEngine()
orc1 = Monster()
orc2 = Monster()
heappush(engine.pqueue, (20,orc1))
heappush(engine.pqueue, (10,orc2))
engine.save_to_file()
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/492217.html
標籤:python-3.x
