X7ROOT File Manager
Current Path:
/lib64/python2.7/Demo/threads
lib64
/
python2.7
/
Demo
/
threads
/
??
..
??
Coroutine.py
(5.39 KB)
??
Coroutine.pyc
(4.15 KB)
??
Coroutine.pyo
(4.15 KB)
??
Generator.py
(2.48 KB)
??
Generator.pyc
(3.24 KB)
??
Generator.pyo
(3.24 KB)
??
README
(440 B)
??
fcmp.py
(1.71 KB)
??
fcmp.pyc
(1.65 KB)
??
fcmp.pyo
(1.65 KB)
??
find.py
(4.12 KB)
??
find.pyc
(3.78 KB)
??
find.pyo
(3.78 KB)
??
squasher.py
(2.97 KB)
??
squasher.pyc
(2.06 KB)
??
squasher.pyo
(2.06 KB)
??
sync.py
(21.15 KB)
??
sync.pyc
(10.85 KB)
??
sync.pyo
(10.85 KB)
??
telnet.py
(3 KB)
??
telnet.pyc
(2.47 KB)
??
telnet.pyo
(2.47 KB)
Editing: Generator.py
# Generator implementation using threads import sys import thread class Killed(Exception): pass 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(), sys.stdout.flush() test()
Upload File
Create Folder