Como evitar erros de decapagem ao compartilhar objetos entre threads?
Eu tenho um programa no qual preciso armazenar uma variável global em um arquivo. Estou fazendo isso usando opickle
módulo.
eu tenho outrothread
(Daemon =False
, dethreading
módulo) que às vezes altera o valor da variável global. O valor também é modificado no escopo global (o programa principal).
Estou despejando o valor da variável em um.pkl
arquivo a cada 5 segundos (usando outrothread
dethreading
módulo).
Mas encontrei o seguinte erro quandodump
O método foi executado:
TypeError: can't pickle _thread.lock objects
Por que isso está acontecendo? E o que posso fazer para corrigir isso?
Nota: Encontrei respostas semelhantes commultiprocessing
módulo. Mas eu preciso de uma resposta parathreading
módulo.
Código:
def save_state():
while True:
global variable
lastSession = open('lastSession.pkl', 'wb')
# error occurs on this line
pickle.dump(variable, lastSession)
lastSession.close()
time.sleep(5)
state_thread = threading.Thread(target = save_state)
state_thread.setDaemon(False)
state_thread.start()
# variable is changed outside this function and also in another thread(not state_thread).