pickler - python reduce pickle




Casi d'uso comuni per pickle in Python (6)

Alcuni usi che ho trovato:

1) salvataggio dei dati di stato di un programma su disco in modo che possa continuare da dove è stato interrotto al riavvio (persistenza)

2) invio di dati python su una connessione TCP in un sistema multi-core o distribuito (marshalling)

3) memorizzazione di oggetti python in un database

4) convertire un oggetto python arbitrario in una stringa in modo che possa essere utilizzato come chiave del dizionario (ad esempio per la memorizzazione nella cache e la memoizzazione).

Ci sono alcuni problemi con l'ultimo - due oggetti identici possono essere decapati e produrre stringhe diverse - o anche lo stesso oggetto decapitato due volte può avere rappresentazioni differenti. Questo perché il sottaceto può includere informazioni di conteggio di riferimento.

Ho esaminato la documentazione pickle , ma non capisco dove pickle è utile.

Quali sono alcuni casi d'uso comuni per il sottaceto?


Esempio di andata e ritorno minimo ..

>>> import pickle
>>> a = Anon()
>>> a.foo = 'bar'
>>> pickled = pickle.dumps(a)
>>> unpickled = pickle.loads(pickled)
>>> unpickled.foo
'bar'

Modifica: ma per quanto riguarda la questione degli esempi reali di decapaggio, forse l' uso più avanzato del decapaggio (dovresti scavare abbastanza in profondità nella fonte) è ZODB: http://svn.zope.org/

Altrimenti, PyPI ne menziona diverse: http://pypi.python.org/pypi?:action=search&term=pickle&submit=search

Ho visto personalmente diversi esempi di oggetti in salamoia inviati sulla rete come un protocollo di trasferimento di rete facile da usare.


L'ho usato in uno dei miei progetti. Se l'app è stata interrotta durante il suo funzionamento (ha svolto un lungo lavoro e ha elaborato molti dati), avevo bisogno di salvare l'intera struttura dati e ricaricarla dopo che l'app è stata nuovamente eseguita. Ho usato cPickle per questo, poiché la velocità era una cosa cruciale e la dimensione dei dati era davvero grande.


Per aggiungere un esempio reale: Lo strumento di documentazione di Sphinx per Python utilizza pickle per memorizzare nella cache i documenti analizzati ei riferimenti incrociati tra documenti, per accelerare le successive build della documentazione.


Pickle è come "Salva come .." e "Apri .." per le tue strutture dati e classi. Diciamo che voglio salvare le mie strutture dati in modo che sia persistente tra le esecuzioni del programma.

Salvataggio:

with open("save.p", "wb") as f:    
    pickle.dump(myStuff, f)        

Caricamento in corso:

try:
    with open("save.p", "rb") as f:
        myStuff = pickle.load(f)
except:
    myStuff = defaultdict(dict)

Ora non devo ricostruire myStuff da capo da capo, e posso solo selezionare (le) da dove l'avevo interrotto.


Posso dirti quali usi lo uso e l'ho visto usato per:

  • Il profilo di gioco salva
  • I dati di gioco salvano come vite e salute
  • Record precedenti di dire numeri inseriti in un programma

Quelli sono quelli che uso per almeno





use-case