home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyo (Python 2.5)
-
- from threadpool import ThreadPool, WorkRequest
- from functools import wraps
- from util.callbacks import callsback
- from traceback import print_exc
- from threading import Lock
- from logging import getLogger
- log = getLogger('threadpool2')
- __all__ = [
- 'threaded',
- 'threaded_exclusive']
-
- def threaded(func):
-
- def wrapper(*a, **kws):
- callback = kws.pop('callback')
- requestID = kws.pop('requestID', None)
- req = WorkRequest(func, args = a, kwds = kws, requestID = requestID, callback = callback.success, exc_callback = callback.error)
- req.verbose = wrapper.verbose
- ThreadPool().putRequest(req)
-
- wrapper = None((wraps(func), callsback)(wrapper))
- wrapper.verbose = True
- return wrapper
-
-
- def threaded_exclusive(func):
- func._exclusive_count = 0
- running_lock = Lock()
- count_lock = Lock()
-
- def wrapper(*a, **k):
- count_lock.acquire(True)
- if not running_lock.acquire(False):
- func._exclusive_count += 1
- count_lock.release()
- else:
-
- try:
- old_count = func._exclusive_count
- count_lock.release()
-
- try:
- func(*a, **k)
- except Exception:
- print_exc()
-
- count_lock.acquire(True)
- if old_count != func._exclusive_count:
- count_lock.release()
- threaded(wrapper)(*a, **k)
- else:
- count_lock.release()
- finally:
- running_lock.release()
-
-
- wrapper = (None, None, None, wraps(func))(wrapper)
- return threaded(wrapper)
-
-