Question on multiple Python users in one application

Loren Wilton myspamacct at earthlink.net
Fri Oct 7 00:06:19 EDT 2016


> To be fair, the sharing of data between threads is no different from
> other concerns about global state. The only thing threads change is
> that you can have multiple functions doing stuff at once.
>
> state = [1,2,3]
>
> def func():
>    state[1] += 5
>    # do work
>    state[1] -= 5

It occurs to me that threads must have some state of their own. For 
instance, if I have two thread and they are both in that same function 
above, one thread needs to know that it is currently on the bytecode for the 
first statement, and the other needs to know that it is in the bytecode for 
some of the # do work. In other words, each thread has a current instruction 
pointer.

If the thread has a current instruction pointer, then it must also know what 
function it is currently in, and therfore have a pointer (or some such) to 
the current function locals:

def func1():
    ham = 0.0;
    ham += 1;    // thread 1 here

def func2():
    ham = 0.0;
    ham -= 1;    // thread 2 here

In my C++ understanding of threads, those manipulations on ham won't 
interact. I would hope this is also true in Python?

If I'm right that a thread knows what function it is in, and therefore has 
function-level state access to the current function, then I'd think that it 
also has to have module level state. After all, functions occur inside 
modules, or at least they can:

spam.py:
ham = 0.0;
def func():
    ham += 1;    // thread 1 here

eggs.py:
ham = 0.0;
def func():
    ham -= 1;    // thread 2 here

Here I would again hope that the simultaneous threads would not cause 
collisions on ham, since (I think?) there should be spam.ham and eggs.ham, 
which would be two separate things.

The worry I can see is if the CPython interpreter has taken some shortcuts 
and has global variables for the pointers to the module globals and the 
funciton locals. In that case, if two threads aren't in the same function I 
can see all hell breaking loose pretty easily.

        Loren 




More information about the Python-list mailing list