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).