<div dir="ltr"><div class="gmail_quote">Sorry for hijacking thread. I hope I won't hider it too much.</div><div class="gmail_quote"><br></div><div class="gmail_quote">On Mon, Apr 6, 2015 at 10:05 PM Armin Rigo <<a href="mailto:arigo@tunes.org">arigo@tunes.org</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">(2) cannot be done in Python without major changes in semantics.  User<br>
code that makes no use of threads, for example, certainly doesn't<br>
expect to be careful about multithreading in the __del__ methods.<br></blockquote><div><br></div><div>GC introduces concurrency to user code anyway: call to some __del__ method can happen in any time in user code, so it might be called in a separate thread just as well (it'll be serialized by GIL anyway). On the other hand single-threaded program should not suffer any deadlocks since there's no locks in it, so we can use this approach only in multithreaded programs.</div><div><br></div><div>__del__ methods themselves should already be pretty isolated in the sense that they can't assume anything about state of objects (except self which belongs only to them when they are executed).</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
(1) is hard too.  What is hard is to decide when acquiring a lock in a<br>
__del__ is safe or not.  For example, it would not be safe if the lock<br>
is some global lock.  But it would be safe if the lock belongs to the<br>
object being finalized, in which case (we can hope that) nobody else<br>
can see it any more.</blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
We can't even be sure that an actual deadlock situation encountered in<br>
a __del__ is really a deadlock; maybe a different thread will come<br>
along and release that lock soon...  I think this is a problem that is<br>
just as hard as the general deadlock problem (i.e. unsolvable, but the<br>
user can use some tools to help him figure out deadlocks when they<br>
really happen).<br></blockquote><div><br></div><div>It will 100% deadlock if the lock in question is held by another thread since we hold GIL that's needed to release it.</div></div></div>