On Fri, May 28, 2021 at 4:14 AM Shreyan Avigyan
<pythonshreya...@gmail.com> wrote:
>
> > A context switch can happen between any two of those instructions.
> > That means one thread could load the global, then another thread could
> > load the same value, resulting in both of them writing back the same
> > incremented value. Or, between opcodes 6 and 8 (between the lines of
> > Python code), you could store the value, then fetch back a different
> > value.
>
> I see now. Then we can go with Steven's idea. Let's keep the changes in 
> locals temporarily and when it yields or returns then modify the __statics__ 
> member. And even if it's a generator it will stop iteration some time and if 
> it doesn't then the member wasn't meant to be modified.
>

So you're saying that...

def f():
    static x = 0
    x += 1
    yield x

next(f())
next(f())
next(f())

will yield 1 every time? According to the "write-back later"
semantics, this is only going to actually update the static once it
gets nexted the second time. This would be utterly unique in all of
Python: that assignment doesn't happen when you say it should happen,
it instead happens arbitrarily later.

I would have to call that behaviour "buggy". If you use literally any
other form of persistent state, ANY other, it would increment.

Even worse: I don't see how your conclusion relates to my explanation
of threading, which you describe. Instead of having a minor risk of a
context switch in the middle of a statement (which can be controlled
with a lock), you have a major risk of a context switch ANYWHERE in
the function - and now there's no way you can use a lock to protect
it, because the lock would (by definition) be released before the
function epilogue.

ChrisA
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/RJSWSPNCT35RJLGUM4L7LN3ETF5IHYJU/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to