diff options
Diffstat (limited to 'lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/threadable.py')
-rwxr-xr-x | lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/threadable.py | 118 |
1 files changed, 0 insertions, 118 deletions
diff --git a/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/threadable.py b/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/threadable.py deleted file mode 100755 index adb5b8b7..00000000 --- a/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/threadable.py +++ /dev/null @@ -1,118 +0,0 @@ -# -*- test-case-name: twisted.python.test_threadable -*- -# Copyright (c) Twisted Matrix Laboratories. -# See LICENSE for details. - - -""" -A module that will allow your program to be multi-threaded, -micro-threaded, and single-threaded. Currently microthreads are -unimplemented. The idea is to abstract away some commonly used -functionality so that I don't have to special-case it in all programs. -""" - - - -from twisted.python import hook - -class DummyLock(object): - """ - Hack to allow locks to be unpickled on an unthreaded system. - """ - - def __reduce__(self): - return (unpickle_lock, ()) - -def unpickle_lock(): - if threadingmodule is not None: - return XLock() - else: - return DummyLock() -unpickle_lock.__safe_for_unpickling__ = True - -def _synchPre(self, *a, **b): - if '_threadable_lock' not in self.__dict__: - _synchLockCreator.acquire() - if '_threadable_lock' not in self.__dict__: - self.__dict__['_threadable_lock'] = XLock() - _synchLockCreator.release() - self._threadable_lock.acquire() - -def _synchPost(self, *a, **b): - self._threadable_lock.release() - -def synchronize(*klasses): - """Make all methods listed in each class' synchronized attribute synchronized. - - The synchronized attribute should be a list of strings, consisting of the - names of methods that must be synchronized. If we are running in threaded - mode these methods will be wrapped with a lock. - """ - if threadmodule is not None: - for klass in klasses: - for methodName in klass.synchronized: - hook.addPre(klass, methodName, _synchPre) - hook.addPost(klass, methodName, _synchPost) - -def init(with_threads=1): - """Initialize threading. - - Don't bother calling this. If it needs to happen, it will happen. - """ - global threaded, _synchLockCreator, XLock - - if with_threads: - if not threaded: - if threadmodule is not None: - threaded = True - - class XLock(threadingmodule._RLock, object): - def __reduce__(self): - return (unpickle_lock, ()) - - _synchLockCreator = XLock() - else: - raise RuntimeError("Cannot initialize threading, platform lacks thread support") - else: - if threaded: - raise RuntimeError("Cannot uninitialize threads") - else: - pass - -_dummyID = object() -def getThreadID(): - if threadmodule is None: - return _dummyID - return threadmodule.get_ident() - - -def isInIOThread(): - """Are we in the thread responsable for I/O requests (the event loop)? - """ - return ioThread == getThreadID() - - - -def registerAsIOThread(): - """Mark the current thread as responsable for I/O requests. - """ - global ioThread - ioThread = getThreadID() - - -ioThread = None -threaded = False - - - -try: - import thread as threadmodule - import threading as threadingmodule -except ImportError: - threadmodule = None - threadingmodule = None -else: - init(True) - - - -__all__ = ['isInIOThread', 'registerAsIOThread', 'getThreadID', 'XLock'] |