[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

AltStyle によって変換されたページ (->オリジナル) /