我正在尝试使用 pickle
来保存我的一个对象,但在进行转储时出现以下错误:
TypeError: 无法对 _thread.lock 对象进行 pickling
对我来说不太清楚,因为我没有在我的代码中使用任何锁。我尝试复现这个错误:
import threading
from time import sleep
import pickle
class some_class:
def __init__(self):
self.a = 1
thr = threading.Thread(target=self.incr)
self.lock = threading.Lock()
thr.start()
def incr(self):
while True:
# with self.lock:
self.a += 1
print(self.a)
sleep(0.5)
if __name__ == "__main__":
a = some_class()
val = pickle.dumps(a, pickle.HIGHEST_PROTOCOL)
print("pickle done!")
如果在对象内定义了线程锁,我无法对其进行pickle处理,是吗?
我认为问题出在使用了threading.lock
,但是否有任何解决方法呢?
实际上,在我的主要项目中,我找不到任何锁,但我使用了很多模块,我无法追踪它们。我应该寻找什么?
谢谢。
pickle_thread.py", line 22, in val = pickle.dumps(a, pickle.HIGHEST_PROTOCOL) TypeError: can't pickle _thread.lock objects