Threading and Conditions
Ken Seehof
kens at sightreader.com
Wed Mar 22 15:44:54 EST 2000
Gordon McMillan wrote:
> Ken Seehof wrote:
>
> . . .
> > Unfortunately, the documentation is inadequate. Does anyone know of a
> > whole sample program using conditions?
>
> The test code at the bottom of the module.
That's the inadequate documentation I was talking about. This "example"would
be much better if it showed the whole interaction, including creating the
threads and conditions. An example should be a working script that
demonstrates a feature. Anyway, I did manage to get it to work.
Here's the "example":
# Consume one item
cv.acquire()
while not an_item_is_available():
cv.wait()
get_an_available_item()
cv.release()
# Produce one item
cv.acquire()
make_an_item_available()
cv.notify()
cv.release()
Anyway I did manage to finally get it to work.
Here's my code based on the "example" (something like this belongs in the
documentation):
from threading import *
from time import sleep
import sys
def an_item_is_available():
return (item != None)
def make_an_item_available():
global item, done
if len(x)>0:
item = x[0]
del x[0]
else:
item = 'end'
done = 1
def get_an_available_item():
global item
print item
item = None
def server():
print 'starting server'
sys.stdout.flush()
while item!='end':
for i in range(1000):
sleep(0.001)
# Produce one item
cv.acquire()
make_an_item_available()
cv.notify()
cv.release()
def client():
print 'starting client'
sys.stdout.flush()
while not done:
while not an_item_is_available():
# Consume one item
cv.acquire()
cv.wait()
get_an_available_item()
cv.release()
def test():
global cv, td, x, item, done
x = ['alpha', 'beta', 'gamma', 'delta']
item = None
done = 0
td = Thread(target = server)
td.setDaemon(1)
cv = Condition()
td.start()
client()
> > Is the Threading module the right thing to use for multi-threading?
>
> Yes.
>
> - Gordon
More information about the Python-list
mailing list