"RuntimeError: dictionary changed size during iteration" ; Good atomic copy operations?
robert
no-spam at no-spam-no-spam.com
Sat Mar 11 06:49:14 EST 2006
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?
More information about the Python-list
mailing list