robert wrote:

> 
>> Is a copy.deepcopy  ( -> "cPickle.dump(copy.deepcopy(obj),f)" ) an 
>> atomic opertion with a guarantee to not fail?
>>
>> Or can I only retry several times in case of RuntimeError?  (which 
>> would apears to me as odd gambling; retry how often?)
> 
> 
> For an intermediate solution, I'm playing roulette:
> 
>     for i in 1,2,3:
>         try:
>             cPickle.dump(obj, f)
>             break
>         except RuntimeError,v:
>             pass
> 

hmm..

     for i in 1,2,3:
         try:
             cPickle.dump(obj, f)
             break
         except RuntimeError,v:
             f.seek(0);f.truncate(0)


Meanwhile I think this is a bug of cPickle.dump: It should use .keys() 
instead of free iteration internally, when pickling elementary dicts. 
I'd file a bug if no objection.

Robert


> I hope this works for some million years ...
> 
> 
> 
>> PS: Zope dumps thread exposed data structes regularly. How does the 
>> ZODB in Zope handle dict/list changes during its pickling operations?
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to