Is the weakref.ref callback is called deterministically?

Duncan Booth duncan at
Thu Jun 13 11:19:11 EDT 2002

janeaustine50 at (Jane Austine) wrote in 
news:ba1e306f.0206130451.795085d6 at

> Even though the index i does not change, it loops till the
> result is not None. Seemingly it depends on the weakref.ref
> callback to remove dead weakrefs.
> However, the while loop wouldn't be needed if the callback
> was called right after the last reference to the object
> was "del"ed.
Have you considered what would happen in a multithreaded program if the 
weak reference became invalid after it was retrieved from the dictionary or 
list, but before it was converted to a strong reference? There may be other 
reasons, but you need loops here to avoid the race condition.

Duncan Booth                                             duncan at
int month(char *p){return(124864/((p[0]+p[1]-p[2]&0x1f)+1)%12)["\5\x8\3"
"\6\7\xb\1\x9\xa\2\0\4"];} // Who said my code was obscure?

More information about the Python-list mailing list