[Python-checkins] python/dist/src/Demo/threads Generator.py, 1.1,
1.2
tim_one at users.sourceforge.net
tim_one at users.sourceforge.net
Sun Jul 18 18:56:40 CEST 2004
Update of /cvsroot/python/python/dist/src/Demo/threads
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20201
Modified Files:
Generator.py
Log Message:
Whitespace normalization. Had to break guido's lock on rev 1.1 to do
this, but I'm sure it wasn't locked intentionally.
Index: Generator.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Demo/threads/Generator.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** Generator.py 3 May 1994 14:15:01 -0000 1.1
--- Generator.py 18 Jul 2004 16:56:37 -0000 1.2
***************
*** 6,84 ****
class Generator:
! # Constructor
! def __init__(self, func, args):
! self.getlock = thread.allocate_lock()
! self.putlock = thread.allocate_lock()
! self.getlock.acquire()
! self.putlock.acquire()
! self.func = func
! self.args = args
! self.done = 0
! self.killed = 0
! thread.start_new_thread(self._start, ())
! # Internal routine
! def _start(self):
! try:
! self.putlock.acquire()
! if not self.killed:
! try:
! apply(self.func, (self,) + self.args)
! except Killed:
! pass
! finally:
! if not self.killed:
! self.done = 1
! self.getlock.release()
! # Called by producer for each value; raise Killed if no more needed
! def put(self, value):
! if self.killed:
! raise TypeError, 'put() called on killed generator'
! self.value = value
! self.getlock.release() # Resume consumer thread
! self.putlock.acquire() # Wait for next get() call
! if self.killed:
! raise Killed
! # Called by producer to get next value; raise EOFError if no more
! def get(self):
! if self.killed:
! raise TypeError, 'get() called on killed generator'
! self.putlock.release() # Resume producer thread
! self.getlock.acquire() # Wait for value to appear
! if self.done:
! raise EOFError # Say there are no more values
! return self.value
! # Called by consumer if no more values wanted
! def kill(self):
! if self.killed:
! raise TypeError, 'kill() called on killed generator'
! self.killed = 1
! self.putlock.release()
! # Clone constructor
! def clone(self):
! return Generator(self.func, self.args)
def pi(g):
! k, a, b, a1, b1 = 2L, 4L, 1L, 12L, 4L
! while 1:
! # Next approximation
! p, q, k = k*k, 2L*k+1L, k+1L
! a, b, a1, b1 = a1, b1, p*a+q*a1, p*b+q*b1
! # Print common digits
! d, d1 = a/b, a1/b1
! while d == d1:
! g.put(int(d))
! a, a1 = 10L*(a%b), 10L*(a1%b1)
! d, d1 = a/b, a1/b1
def test():
! g = Generator(pi, ())
! g.kill()
! g = Generator(pi, ())
! for i in range(10): print g.get(),
! print
! h = g.clone()
! g.kill()
! while 1:
! print h.get(),
test()
--- 6,84 ----
class Generator:
! # Constructor
! def __init__(self, func, args):
! self.getlock = thread.allocate_lock()
! self.putlock = thread.allocate_lock()
! self.getlock.acquire()
! self.putlock.acquire()
! self.func = func
! self.args = args
! self.done = 0
! self.killed = 0
! thread.start_new_thread(self._start, ())
! # Internal routine
! def _start(self):
! try:
! self.putlock.acquire()
! if not self.killed:
! try:
! apply(self.func, (self,) + self.args)
! except Killed:
! pass
! finally:
! if not self.killed:
! self.done = 1
! self.getlock.release()
! # Called by producer for each value; raise Killed if no more needed
! def put(self, value):
! if self.killed:
! raise TypeError, 'put() called on killed generator'
! self.value = value
! self.getlock.release() # Resume consumer thread
! self.putlock.acquire() # Wait for next get() call
! if self.killed:
! raise Killed
! # Called by producer to get next value; raise EOFError if no more
! def get(self):
! if self.killed:
! raise TypeError, 'get() called on killed generator'
! self.putlock.release() # Resume producer thread
! self.getlock.acquire() # Wait for value to appear
! if self.done:
! raise EOFError # Say there are no more values
! return self.value
! # Called by consumer if no more values wanted
! def kill(self):
! if self.killed:
! raise TypeError, 'kill() called on killed generator'
! self.killed = 1
! self.putlock.release()
! # Clone constructor
! def clone(self):
! return Generator(self.func, self.args)
def pi(g):
! k, a, b, a1, b1 = 2L, 4L, 1L, 12L, 4L
! while 1:
! # Next approximation
! p, q, k = k*k, 2L*k+1L, k+1L
! a, b, a1, b1 = a1, b1, p*a+q*a1, p*b+q*b1
! # Print common digits
! d, d1 = a/b, a1/b1
! while d == d1:
! g.put(int(d))
! a, a1 = 10L*(a%b), 10L*(a1%b1)
! d, d1 = a/b, a1/b1
def test():
! g = Generator(pi, ())
! g.kill()
! g = Generator(pi, ())
! for i in range(10): print g.get(),
! print
! h = g.clone()
! g.kill()
! while 1:
! print h.get(),
test()
More information about the Python-checkins
mailing list