Gigs_ wrote:
can someone explain me this code
did you write that yourself, or did you find it in some book or article?
----------------------------------
import thread
the thread module should not be used directly by application programs;
use the "threading" module instead.
stdoutmutex = thread.allocate_lock()
exitmutexes = [0] * 10
def counter(myId, count):
for i in range(count):
stdoutmutex.acquire()
print '[%s] =%s' % (myId, i)
stdoutmutex.release()
exitmutexes[myId] = 1 # signal main thread
for i in range(10):
thread.start_new(counter, (i, 100))
while 0 in exitmutexes:
pass
that's a "busy loop"; the CPU will spend all the cycles it can get
checking for the condition. that's not a good way to wait for
things.
use the "threading" module instead; by default, it waits for all threads
to finish without requiring flag lists and excessive CPU use.
print 'Main thread exiting.'
-----------------------------------
thread.start_new(counter, (i, 100)) is running counter function.
it starts a new instance of counter, in a separate thread.
Is counter function and while statement executed in same time (other
things i understand, but can't get into this)?
yes, the while loop will run in the "main" thread, in parallel with the
other threads. however, Python uses a global lock to synchronize access
to Python variables:
http://effbot.org/pyfaq/what-is-the-...reter-lock.htm
so the threads in a simple program like this won't run fully in parallel
on a multi-CPU machine.
</F>