I want to release the GIL

MRAB google at mrabarnett.plus.com
Tue Oct 21 07:49:27 EDT 2008


On Oct 21, 10:22 am, Carl Banks <pavlovevide... at gmail.com> wrote:
> On Oct 21, 5:09 am, "Gabriel Genellina" <gagsl-... at yahoo.com.ar>
> wrote:
>
> > En Tue, 21 Oct 2008 04:58:00 -0200, Piotr Sobolewski  
> > <piotr_sobolew... at o2.pl> escribió:
>
> > > But what about my main question? Is it possible to release GIL without
> > > sleeping? I know that in this example situation I can achieve my goals
> > > without that - I can just move sleep outside of locked block. But I
> > > just want to know it for future - can I just do something like
> > > thread.gil_release()?
>
> > No, you can't release the GIL *and* continue executing Python code.
>
> I don't think that's what the OP was asking about; I think he merely
> wanted to force a GIL release to give the other thread a chance to
> run.
>
> Reason being: in his code the lock was re-acquired right after it was
> released.  This meant that the same thread that released the lock
> almost always acquired it right back, since there was only a tiny
> window in which a thread switch could take place.  Obviously the
> wisdom of what he was doing was suspect, but the OP was right in that
> a manual GIL release would allow a thread switch and could have helped
> avoid starvation in that case.
>
If he released the GIL then he would still have to ensure that other
thread got a chance to claim it before the releaser tried to reclaim
it, which suggests the sleep that he was trying to avoid (unless the
release was really "yield the GIL to another thread if one is waiting
for it").



More information about the Python-list mailing list