home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2009 June / maximum-cd-2009-06.iso / DiscContents / digsby_setup.exe / lib / util / threads / threadpool2.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-02-26  |  1.9 KB  |  63 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. from threadpool import ThreadPool, WorkRequest
  5. from functools import wraps
  6. from util.callbacks import callsback
  7. from traceback import print_exc
  8. from threading import Lock
  9. from logging import getLogger
  10. log = getLogger('threadpool2')
  11. __all__ = [
  12.     'threaded',
  13.     'threaded_exclusive']
  14.  
  15. def threaded(func):
  16.     
  17.     def wrapper(*a, **kws):
  18.         callback = kws.pop('callback')
  19.         requestID = kws.pop('requestID', None)
  20.         req = WorkRequest(func, args = a, kwds = kws, requestID = requestID, callback = callback.success, exc_callback = callback.error)
  21.         req.verbose = wrapper.verbose
  22.         ThreadPool().putRequest(req)
  23.  
  24.     wrapper = None((wraps(func), callsback)(wrapper))
  25.     wrapper.verbose = True
  26.     return wrapper
  27.  
  28.  
  29. def threaded_exclusive(func):
  30.     func._exclusive_count = 0
  31.     running_lock = Lock()
  32.     count_lock = Lock()
  33.     
  34.     def wrapper(*a, **k):
  35.         count_lock.acquire(True)
  36.         if not running_lock.acquire(False):
  37.             func._exclusive_count += 1
  38.             count_lock.release()
  39.         else:
  40.             
  41.             try:
  42.                 old_count = func._exclusive_count
  43.                 count_lock.release()
  44.                 
  45.                 try:
  46.                     func(*a, **k)
  47.                 except Exception:
  48.                     print_exc()
  49.  
  50.                 count_lock.acquire(True)
  51.                 if old_count != func._exclusive_count:
  52.                     count_lock.release()
  53.                     threaded(wrapper)(*a, **k)
  54.                 else:
  55.                     count_lock.release()
  56.             finally:
  57.                 running_lock.release()
  58.  
  59.  
  60.     wrapper = (None, None, None, wraps(func))(wrapper)
  61.     return threaded(wrapper)
  62.  
  63.