/Lib/multiprocessing/dummy/__init__.py
http://unladen-swallow.googlecode.com/ · Python · 126 lines · 80 code · 24 blank · 22 comment · 7 complexity · 03a2d55c393f42ddb94d0221e002ec3e MD5 · raw file
- #
- # Support for the API of the multiprocessing package using threads
- #
- # multiprocessing/dummy/__init__.py
- #
- # Copyright (c) 2006-2008, R Oudkerk --- see COPYING.txt
- #
- __all__ = [
- 'Process', 'current_process', 'active_children', 'freeze_support',
- 'Lock', 'RLock', 'Semaphore', 'BoundedSemaphore', 'Condition',
- 'Event', 'Queue', 'Manager', 'Pipe', 'Pool', 'JoinableQueue'
- ]
- #
- # Imports
- #
- import threading
- import sys
- import weakref
- import array
- import itertools
- from multiprocessing import TimeoutError, cpu_count
- from multiprocessing.dummy.connection import Pipe
- from threading import Lock, RLock, Semaphore, BoundedSemaphore
- from threading import Event
- from Queue import Queue
- #
- #
- #
- class DummyProcess(threading.Thread):
- def __init__(self, group=None, target=None, name=None, args=(), kwargs={}):
- threading.Thread.__init__(self, group, target, name, args, kwargs)
- self._pid = None
- self._children = weakref.WeakKeyDictionary()
- self._start_called = False
- self._parent = current_process()
- def start(self):
- assert self._parent is current_process()
- self._start_called = True
- self._parent._children[self] = None
- threading.Thread.start(self)
- @property
- def exitcode(self):
- if self._start_called and not self.is_alive():
- return 0
- else:
- return None
- #
- #
- #
- class Condition(threading._Condition):
- notify_all = threading._Condition.notify_all.im_func
- #
- #
- #
- Process = DummyProcess
- current_process = threading.current_thread
- current_process()._children = weakref.WeakKeyDictionary()
- def active_children():
- children = current_process()._children
- for p in list(children):
- if not p.is_alive():
- children.pop(p, None)
- return list(children)
- def freeze_support():
- pass
- #
- #
- #
- class Namespace(object):
- def __init__(self, **kwds):
- self.__dict__.update(kwds)
- def __repr__(self):
- items = self.__dict__.items()
- temp = []
- for name, value in items:
- if not name.startswith('_'):
- temp.append('%s=%r' % (name, value))
- temp.sort()
- return 'Namespace(%s)' % str.join(', ', temp)
- dict = dict
- list = list
- def Array(typecode, sequence, lock=True):
- return array.array(typecode, sequence)
- class Value(object):
- def __init__(self, typecode, value, lock=True):
- self._typecode = typecode
- self._value = value
- def _get(self):
- return self._value
- def _set(self, value):
- self._value = value
- value = property(_get, _set)
- def __repr__(self):
- return '<%r(%r, %r)>'%(type(self).__name__,self._typecode,self._value)
- def Manager():
- return sys.modules[__name__]
- def shutdown():
- pass
- def Pool(processes=None, initializer=None, initargs=()):
- from multiprocessing.pool import ThreadPool
- return ThreadPool(processes, initializer, initargs)
- JoinableQueue = Queue