14adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# 24adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Package analogous to 'threading.py' but using processes 34adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# 44adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# multiprocessing/__init__.py 54adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# 64adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# This package is intended to duplicate the functionality (and much of 74adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# the API) of threading.py but uses processes instead of threads. A 84adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# subpackage 'multiprocessing.dummy' has the same API but is a simple 94adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# wrapper for 'threading'. 104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# 114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Try calling `multiprocessing.doc.main()` to read the html 124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# documentation in a webbrowser. 134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# 144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# 154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Copyright (c) 2006-2008, R Oudkerk 164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# All rights reserved. 174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# 184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Redistribution and use in source and binary forms, with or without 194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# modification, are permitted provided that the following conditions 204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# are met: 214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# 224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# 1. Redistributions of source code must retain the above copyright 234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# notice, this list of conditions and the following disclaimer. 244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# 2. Redistributions in binary form must reproduce the above copyright 254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# notice, this list of conditions and the following disclaimer in the 264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# documentation and/or other materials provided with the distribution. 274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# 3. Neither the name of author nor the names of any contributors may be 284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# used to endorse or promote products derived from this software 294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# without specific prior written permission. 304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# 314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND 324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# SUCH DAMAGE. 424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# 434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao__version__ = '0.70a1' 454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao__all__ = [ 474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'Process', 'current_process', 'active_children', 'freeze_support', 484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'Manager', 'Pipe', 'cpu_count', 'log_to_stderr', 'get_logger', 494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'allow_connection_pickling', 'BufferTooShort', 'TimeoutError', 504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'Lock', 'RLock', 'Semaphore', 'BoundedSemaphore', 'Condition', 514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'Event', 'Queue', 'JoinableQueue', 'Pool', 'Value', 'Array', 524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'RawValue', 'RawArray', 'SUBDEBUG', 'SUBWARNING', 534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao__author__ = 'R. Oudkerk (r.m.oudkerk@gmail.com)' 564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# 584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Imports 594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# 604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport os 624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport sys 634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaofrom multiprocessing.process import Process, current_process, active_children 654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaofrom multiprocessing.util import SUBDEBUG, SUBWARNING 664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# 684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Exceptions 694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# 704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass ProcessError(Exception): 724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass BufferTooShort(ProcessError): 754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TimeoutError(ProcessError): 784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass AuthenticationError(ProcessError): 814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# This is down here because _multiprocessing uses BufferTooShort 844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport _multiprocessing 854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# 874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Definitions not depending on native semaphores 884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# 894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef Manager(): 914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Returns a manager associated with a running server process 934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao The managers methods such as `Lock()`, `Condition()` and `Queue()` 954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao can be used to create shared objects. 964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from multiprocessing.managers import SyncManager 984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao m = SyncManager() 994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao m.start() 1004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return m 1014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef Pipe(duplex=True): 1034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 1044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Returns two connection object connected by a pipe 1054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 1064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from multiprocessing.connection import Pipe 1074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return Pipe(duplex) 1084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef cpu_count(): 1104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 1114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Returns the number of CPUs in the system 1124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 1134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if sys.platform == 'win32': 1144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 1154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao num = int(os.environ['NUMBER_OF_PROCESSORS']) 1164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except (ValueError, KeyError): 1174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao num = 0 1184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao elif 'bsd' in sys.platform or sys.platform == 'darwin': 1194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao comm = '/sbin/sysctl -n hw.ncpu' 1204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if sys.platform == 'darwin': 1214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao comm = '/usr' + comm 1224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 1234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with os.popen(comm) as p: 1244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao num = int(p.read()) 1254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except ValueError: 1264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao num = 0 1274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else: 1284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 1294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao num = os.sysconf('SC_NPROCESSORS_ONLN') 1304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except (ValueError, OSError, AttributeError): 1314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao num = 0 1324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if num >= 1: 1344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return num 1354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else: 1364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raise NotImplementedError('cannot determine number of cpus') 1374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef freeze_support(): 1394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 1404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Check whether this is a fake forked process in a frozen executable. 1414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao If so then run code specified by commandline and exit. 1424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 1434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if sys.platform == 'win32' and getattr(sys, 'frozen', False): 1444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from multiprocessing.forking import freeze_support 1454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao freeze_support() 1464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef get_logger(): 1484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 1494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Return package logger -- if it does not already exist then it is created 1504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 1514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from multiprocessing.util import get_logger 1524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return get_logger() 1534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef log_to_stderr(level=None): 1554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 1564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Turn on logging and add a handler which prints to stderr 1574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 1584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from multiprocessing.util import log_to_stderr 1594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return log_to_stderr(level) 1604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef allow_connection_pickling(): 1624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 1634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Install support for sending connections and sockets between processes 1644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 1654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from multiprocessing import reduction 1664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# 1684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Definitions depending on native semaphores 1694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# 1704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef Lock(): 1724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 1734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Returns a non-recursive lock object 1744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 1754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from multiprocessing.synchronize import Lock 1764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return Lock() 1774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef RLock(): 1794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 1804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Returns a recursive lock object 1814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 1824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from multiprocessing.synchronize import RLock 1834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return RLock() 1844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef Condition(lock=None): 1864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 1874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Returns a condition object 1884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 1894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from multiprocessing.synchronize import Condition 1904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return Condition(lock) 1914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef Semaphore(value=1): 1934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 1944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Returns a semaphore object 1954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 1964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from multiprocessing.synchronize import Semaphore 1974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return Semaphore(value) 1984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef BoundedSemaphore(value=1): 2004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 2014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Returns a bounded semaphore object 2024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 2034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from multiprocessing.synchronize import BoundedSemaphore 2044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return BoundedSemaphore(value) 2054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef Event(): 2074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 2084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Returns an event object 2094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 2104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from multiprocessing.synchronize import Event 2114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return Event() 2124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef Queue(maxsize=0): 2144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 2154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Returns a queue object 2164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 2174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from multiprocessing.queues import Queue 2184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return Queue(maxsize) 2194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef JoinableQueue(maxsize=0): 2214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 2224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Returns a queue object 2234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 2244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from multiprocessing.queues import JoinableQueue 2254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return JoinableQueue(maxsize) 2264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef Pool(processes=None, initializer=None, initargs=(), maxtasksperchild=None): 2284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 2294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Returns a process pool object 2304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 2314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from multiprocessing.pool import Pool 2324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return Pool(processes, initializer, initargs, maxtasksperchild) 2334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef RawValue(typecode_or_type, *args): 2354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 2364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Returns a shared object 2374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 2384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from multiprocessing.sharedctypes import RawValue 2394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return RawValue(typecode_or_type, *args) 2404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef RawArray(typecode_or_type, size_or_initializer): 2424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 2434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Returns a shared array 2444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 2454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from multiprocessing.sharedctypes import RawArray 2464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return RawArray(typecode_or_type, size_or_initializer) 2474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef Value(typecode_or_type, *args, **kwds): 2494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 2504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Returns a synchronized shared object 2514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 2524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from multiprocessing.sharedctypes import Value 2534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return Value(typecode_or_type, *args, **kwds) 2544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef Array(typecode_or_type, size_or_initializer, **kwds): 2564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 2574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Returns a synchronized shared array 2584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 2594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from multiprocessing.sharedctypes import Array 2604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return Array(typecode_or_type, size_or_initializer, **kwds) 2614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# 2634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# 2644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# 2654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoif sys.platform == 'win32': 2674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def set_executable(executable): 2694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 2704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Sets the path to a python.exe or pythonw.exe binary used to run 2714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao child processes on Windows instead of sys.executable. 2724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Useful for people embedding Python. 2734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ''' 2744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from multiprocessing.forking import set_executable 2754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao set_executable(executable) 2764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao __all__ += ['set_executable'] 278