blob: 0756470c94a2fd8b0a2586e4a43756d5f754ba2f [file] [log] [blame]
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001:mod:`multiprocessing` --- Process-based "threading" interface
2==============================================================
3
4.. module:: multiprocessing
5 :synopsis: Process-based "threading" interface.
6
7.. versionadded:: 2.6
8
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00009
Benjamin Peterson190d56e2008-06-11 02:40:25 +000010Introduction
Andrew M. Kuchlingbe504f12008-06-19 19:48:42 +000011----------------------
Benjamin Peterson190d56e2008-06-11 02:40:25 +000012
Benjamin Peterson910c2ab2008-06-27 23:22:06 +000013:mod:`multiprocessing` is a package that supports spawning processes using an
14API similar to the :mod:`threading` module. The :mod:`multiprocessing` package
15offers both local and remote concurrency, effectively side-stepping the
16:term:`Global Interpreter Lock` by using subprocesses instead of threads. Due
17to this, the :mod:`multiprocessing` module allows the programmer to fully
18leverage multiple processors on a given machine. It runs on both Unix and
Andrew M. Kuchlingbe504f12008-06-19 19:48:42 +000019Windows.
Benjamin Peterson190d56e2008-06-11 02:40:25 +000020
Jesse Noller37040cd2008-09-30 00:15:45 +000021.. warning::
22
Andrew M. Kuchling83b39102008-09-30 12:31:07 +000023 Some of this package's functionality requires a functioning shared semaphore
Georg Brandlc62ef8b2009-01-03 20:55:06 +000024 implementation on the host operating system. Without one, the
25 :mod:`multiprocessing.synchronize` module will be disabled, and attempts to
26 import it will result in an :exc:`ImportError`. See
Andrew M. Kuchling83b39102008-09-30 12:31:07 +000027 :issue:`3770` for additional information.
Benjamin Peterson910c2ab2008-06-27 23:22:06 +000028
Jesse Nollera280fd72008-11-28 18:22:54 +000029.. note::
30
Ezio Melotti6940e612011-04-29 07:10:24 +030031 Functionality within this package requires that the ``__main__`` module be
Jesse Nollera280fd72008-11-28 18:22:54 +000032 importable by the children. This is covered in :ref:`multiprocessing-programming`
33 however it is worth pointing out here. This means that some examples, such
34 as the :class:`multiprocessing.Pool` examples will not work in the
35 interactive interpreter. For example::
36
37 >>> from multiprocessing import Pool
38 >>> p = Pool(5)
39 >>> def f(x):
Georg Brandl7044b112009-01-03 21:04:55 +000040 ... return x*x
Georg Brandlc62ef8b2009-01-03 20:55:06 +000041 ...
Jesse Nollera280fd72008-11-28 18:22:54 +000042 >>> p.map(f, [1,2,3])
43 Process PoolWorker-1:
44 Process PoolWorker-2:
R. David Murray636b23a2009-04-28 16:08:18 +000045 Process PoolWorker-3:
46 Traceback (most recent call last):
Jesse Nollera280fd72008-11-28 18:22:54 +000047 Traceback (most recent call last):
48 Traceback (most recent call last):
49 AttributeError: 'module' object has no attribute 'f'
50 AttributeError: 'module' object has no attribute 'f'
51 AttributeError: 'module' object has no attribute 'f'
52
R. David Murray636b23a2009-04-28 16:08:18 +000053 (If you try this it will actually output three full tracebacks
54 interleaved in a semi-random fashion, and then you may have to
55 stop the master process somehow.)
56
Jesse Nollera280fd72008-11-28 18:22:54 +000057
Benjamin Peterson190d56e2008-06-11 02:40:25 +000058The :class:`Process` class
59~~~~~~~~~~~~~~~~~~~~~~~~~~
60
61In :mod:`multiprocessing`, processes are spawned by creating a :class:`Process`
Benjamin Peterson910c2ab2008-06-27 23:22:06 +000062object and then calling its :meth:`~Process.start` method. :class:`Process`
Benjamin Peterson190d56e2008-06-11 02:40:25 +000063follows the API of :class:`threading.Thread`. A trivial example of a
64multiprocess program is ::
65
Jesse Nollera280fd72008-11-28 18:22:54 +000066 from multiprocessing import Process
Benjamin Peterson190d56e2008-06-11 02:40:25 +000067
Jesse Nollera280fd72008-11-28 18:22:54 +000068 def f(name):
69 print 'hello', name
Benjamin Peterson190d56e2008-06-11 02:40:25 +000070
Jesse Nollera280fd72008-11-28 18:22:54 +000071 if __name__ == '__main__':
72 p = Process(target=f, args=('bob',))
73 p.start()
74 p.join()
Benjamin Peterson190d56e2008-06-11 02:40:25 +000075
Jesse Nollera280fd72008-11-28 18:22:54 +000076To show the individual process IDs involved, here is an expanded example::
77
78 from multiprocessing import Process
79 import os
80
81 def info(title):
82 print title
83 print 'module name:', __name__
Georg Brandle683ef52012-07-01 09:47:54 +020084 if hasattr(os, 'getppid'): # only available on Unix
85 print 'parent process:', os.getppid()
Jesse Nollera280fd72008-11-28 18:22:54 +000086 print 'process id:', os.getpid()
Georg Brandlc62ef8b2009-01-03 20:55:06 +000087
Jesse Nollera280fd72008-11-28 18:22:54 +000088 def f(name):
89 info('function f')
90 print 'hello', name
Georg Brandlc62ef8b2009-01-03 20:55:06 +000091
Jesse Nollera280fd72008-11-28 18:22:54 +000092 if __name__ == '__main__':
93 info('main line')
94 p = Process(target=f, args=('bob',))
95 p.start()
96 p.join()
Benjamin Peterson190d56e2008-06-11 02:40:25 +000097
98For an explanation of why (on Windows) the ``if __name__ == '__main__'`` part is
99necessary, see :ref:`multiprocessing-programming`.
100
101
102
103Exchanging objects between processes
104~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
105
106:mod:`multiprocessing` supports two types of communication channel between
107processes:
108
109**Queues**
110
Sandro Tosi8b48c662012-02-25 19:35:16 +0100111 The :class:`~multiprocessing.Queue` class is a near clone of :class:`Queue.Queue`. For
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000112 example::
113
114 from multiprocessing import Process, Queue
115
116 def f(q):
117 q.put([42, None, 'hello'])
118
Georg Brandledd7d952009-01-03 14:29:53 +0000119 if __name__ == '__main__':
120 q = Queue()
121 p = Process(target=f, args=(q,))
122 p.start()
123 print q.get() # prints "[42, None, 'hello']"
124 p.join()
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000125
126 Queues are thread and process safe.
127
128**Pipes**
129
130 The :func:`Pipe` function returns a pair of connection objects connected by a
131 pipe which by default is duplex (two-way). For example::
132
133 from multiprocessing import Process, Pipe
134
135 def f(conn):
136 conn.send([42, None, 'hello'])
137 conn.close()
138
139 if __name__ == '__main__':
140 parent_conn, child_conn = Pipe()
141 p = Process(target=f, args=(child_conn,))
142 p.start()
143 print parent_conn.recv() # prints "[42, None, 'hello']"
144 p.join()
145
146 The two connection objects returned by :func:`Pipe` represent the two ends of
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000147 the pipe. Each connection object has :meth:`~Connection.send` and
148 :meth:`~Connection.recv` methods (among others). Note that data in a pipe
149 may become corrupted if two processes (or threads) try to read from or write
150 to the *same* end of the pipe at the same time. Of course there is no risk
151 of corruption from processes using different ends of the pipe at the same
152 time.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000153
154
155Synchronization between processes
156~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
157
158:mod:`multiprocessing` contains equivalents of all the synchronization
159primitives from :mod:`threading`. For instance one can use a lock to ensure
160that only one process prints to standard output at a time::
161
162 from multiprocessing import Process, Lock
163
164 def f(l, i):
165 l.acquire()
166 print 'hello world', i
167 l.release()
168
169 if __name__ == '__main__':
170 lock = Lock()
171
172 for num in range(10):
173 Process(target=f, args=(lock, num)).start()
174
175Without using the lock output from the different processes is liable to get all
176mixed up.
177
178
179Sharing state between processes
180~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
181
182As mentioned above, when doing concurrent programming it is usually best to
183avoid using shared state as far as possible. This is particularly true when
184using multiple processes.
185
186However, if you really do need to use some shared data then
187:mod:`multiprocessing` provides a couple of ways of doing so.
188
189**Shared memory**
190
191 Data can be stored in a shared memory map using :class:`Value` or
192 :class:`Array`. For example, the following code ::
193
194 from multiprocessing import Process, Value, Array
195
196 def f(n, a):
197 n.value = 3.1415927
198 for i in range(len(a)):
199 a[i] = -a[i]
200
201 if __name__ == '__main__':
202 num = Value('d', 0.0)
203 arr = Array('i', range(10))
204
205 p = Process(target=f, args=(num, arr))
206 p.start()
207 p.join()
208
209 print num.value
210 print arr[:]
211
212 will print ::
213
214 3.1415927
215 [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
216
217 The ``'d'`` and ``'i'`` arguments used when creating ``num`` and ``arr`` are
218 typecodes of the kind used by the :mod:`array` module: ``'d'`` indicates a
Benjamin Peterson90f36732008-07-12 20:16:19 +0000219 double precision float and ``'i'`` indicates a signed integer. These shared
Georg Brandl837fbb02010-11-26 07:58:55 +0000220 objects will be process and thread-safe.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000221
222 For more flexibility in using shared memory one can use the
223 :mod:`multiprocessing.sharedctypes` module which supports the creation of
224 arbitrary ctypes objects allocated from shared memory.
225
226**Server process**
227
228 A manager object returned by :func:`Manager` controls a server process which
Andrew M. Kuchlingded01d12008-07-14 00:35:32 +0000229 holds Python objects and allows other processes to manipulate them using
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000230 proxies.
231
232 A manager returned by :func:`Manager` will support types :class:`list`,
233 :class:`dict`, :class:`Namespace`, :class:`Lock`, :class:`RLock`,
234 :class:`Semaphore`, :class:`BoundedSemaphore`, :class:`Condition`,
Sandro Tosi8b48c662012-02-25 19:35:16 +0100235 :class:`Event`, :class:`~multiprocessing.Queue`, :class:`Value` and :class:`Array`. For
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000236 example, ::
237
238 from multiprocessing import Process, Manager
239
240 def f(d, l):
241 d[1] = '1'
242 d['2'] = 2
243 d[0.25] = None
244 l.reverse()
245
246 if __name__ == '__main__':
247 manager = Manager()
248
249 d = manager.dict()
250 l = manager.list(range(10))
251
252 p = Process(target=f, args=(d, l))
253 p.start()
254 p.join()
255
256 print d
257 print l
258
259 will print ::
260
261 {0.25: None, 1: '1', '2': 2}
262 [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
263
264 Server process managers are more flexible than using shared memory objects
265 because they can be made to support arbitrary object types. Also, a single
266 manager can be shared by processes on different computers over a network.
267 They are, however, slower than using shared memory.
268
269
270Using a pool of workers
271~~~~~~~~~~~~~~~~~~~~~~~
272
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000273The :class:`~multiprocessing.pool.Pool` class represents a pool of worker
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000274processes. It has methods which allows tasks to be offloaded to the worker
275processes in a few different ways.
276
277For example::
278
279 from multiprocessing import Pool
280
281 def f(x):
282 return x*x
283
284 if __name__ == '__main__':
285 pool = Pool(processes=4) # start 4 worker processes
Eli Bendersky4b76f8a2011-12-31 07:05:12 +0200286 result = pool.apply_async(f, [10]) # evaluate "f(10)" asynchronously
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000287 print result.get(timeout=1) # prints "100" unless your computer is *very* slow
288 print pool.map(f, range(10)) # prints "[0, 1, 4,..., 81]"
289
Richard Oudkerk49032532013-07-02 12:31:50 +0100290Note that the methods of a pool should only ever be used by the
291process which created it.
292
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000293
294Reference
295---------
296
297The :mod:`multiprocessing` package mostly replicates the API of the
298:mod:`threading` module.
299
300
301:class:`Process` and exceptions
302~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
303
Ezio Melottied3f5902012-09-14 06:48:32 +0300304.. class:: Process(group=None, target=None, name=None, args=(), kwargs={})
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000305
306 Process objects represent activity that is run in a separate process. The
307 :class:`Process` class has equivalents of all the methods of
308 :class:`threading.Thread`.
309
310 The constructor should always be called with keyword arguments. *group*
Andrew M. Kuchlingbe504f12008-06-19 19:48:42 +0000311 should always be ``None``; it exists solely for compatibility with
Benjamin Peterson73641d72008-08-20 14:07:59 +0000312 :class:`threading.Thread`. *target* is the callable object to be invoked by
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000313 the :meth:`run()` method. It defaults to ``None``, meaning nothing is
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000314 called. *name* is the process name. By default, a unique name is constructed
315 of the form 'Process-N\ :sub:`1`:N\ :sub:`2`:...:N\ :sub:`k`' where N\
316 :sub:`1`,N\ :sub:`2`,...,N\ :sub:`k` is a sequence of integers whose length
317 is determined by the *generation* of the process. *args* is the argument
318 tuple for the target invocation. *kwargs* is a dictionary of keyword
319 arguments for the target invocation. By default, no arguments are passed to
320 *target*.
321
322 If a subclass overrides the constructor, it must make sure it invokes the
323 base class constructor (:meth:`Process.__init__`) before doing anything else
324 to the process.
325
326 .. method:: run()
327
328 Method representing the process's activity.
329
330 You may override this method in a subclass. The standard :meth:`run`
331 method invokes the callable object passed to the object's constructor as
332 the target argument, if any, with sequential and keyword arguments taken
333 from the *args* and *kwargs* arguments, respectively.
334
335 .. method:: start()
336
337 Start the process's activity.
338
339 This must be called at most once per process object. It arranges for the
340 object's :meth:`run` method to be invoked in a separate process.
341
342 .. method:: join([timeout])
343
344 Block the calling thread until the process whose :meth:`join` method is
345 called terminates or until the optional timeout occurs.
346
347 If *timeout* is ``None`` then there is no timeout.
348
349 A process can be joined many times.
350
351 A process cannot join itself because this would cause a deadlock. It is
352 an error to attempt to join a process before it has been started.
353
Benjamin Peterson73641d72008-08-20 14:07:59 +0000354 .. attribute:: name
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000355
Benjamin Peterson73641d72008-08-20 14:07:59 +0000356 The process's name.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000357
358 The name is a string used for identification purposes only. It has no
359 semantics. Multiple processes may be given the same name. The initial
360 name is set by the constructor.
361
Jesse Nollera280fd72008-11-28 18:22:54 +0000362 .. method:: is_alive
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000363
364 Return whether the process is alive.
365
366 Roughly, a process object is alive from the moment the :meth:`start`
367 method returns until the child process terminates.
368
Benjamin Peterson73641d72008-08-20 14:07:59 +0000369 .. attribute:: daemon
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000370
Georg Brandl3bcb0ce2008-12-30 10:15:49 +0000371 The process's daemon flag, a Boolean value. This must be set before
Benjamin Peterson73641d72008-08-20 14:07:59 +0000372 :meth:`start` is called.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000373
374 The initial value is inherited from the creating process.
375
376 When a process exits, it attempts to terminate all of its daemonic child
377 processes.
378
379 Note that a daemonic process is not allowed to create child processes.
380 Otherwise a daemonic process would leave its children orphaned if it gets
Jesse Nollerd4792cd2009-06-29 18:20:34 +0000381 terminated when its parent process exits. Additionally, these are **not**
382 Unix daemons or services, they are normal processes that will be
Georg Brandl09302282010-10-06 09:32:48 +0000383 terminated (and not joined) if non-daemonic processes have exited.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000384
Brett Cannon971f1022008-08-24 23:15:19 +0000385 In addition to the :class:`Threading.Thread` API, :class:`Process` objects
386 also support the following attributes and methods:
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000387
Benjamin Peterson73641d72008-08-20 14:07:59 +0000388 .. attribute:: pid
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000389
390 Return the process ID. Before the process is spawned, this will be
391 ``None``.
392
Benjamin Peterson73641d72008-08-20 14:07:59 +0000393 .. attribute:: exitcode
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000394
Benjamin Peterson73641d72008-08-20 14:07:59 +0000395 The child's exit code. This will be ``None`` if the process has not yet
396 terminated. A negative value *-N* indicates that the child was terminated
397 by signal *N*.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000398
Benjamin Peterson73641d72008-08-20 14:07:59 +0000399 .. attribute:: authkey
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000400
Benjamin Peterson73641d72008-08-20 14:07:59 +0000401 The process's authentication key (a byte string).
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000402
403 When :mod:`multiprocessing` is initialized the main process is assigned a
404 random string using :func:`os.random`.
405
406 When a :class:`Process` object is created, it will inherit the
Benjamin Peterson73641d72008-08-20 14:07:59 +0000407 authentication key of its parent process, although this may be changed by
408 setting :attr:`authkey` to another byte string.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000409
410 See :ref:`multiprocessing-auth-keys`.
411
Andrew M. Kuchlingbe504f12008-06-19 19:48:42 +0000412 .. method:: terminate()
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000413
Andrew M. Kuchlingbe504f12008-06-19 19:48:42 +0000414 Terminate the process. On Unix this is done using the ``SIGTERM`` signal;
Sandro Tosi98ed08f2012-01-14 16:42:02 +0100415 on Windows :c:func:`TerminateProcess` is used. Note that exit handlers and
Andrew M. Kuchlingbe504f12008-06-19 19:48:42 +0000416 finally clauses, etc., will not be executed.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000417
418 Note that descendant processes of the process will *not* be terminated --
419 they will simply become orphaned.
420
421 .. warning::
422
423 If this method is used when the associated process is using a pipe or
424 queue then the pipe or queue is liable to become corrupted and may
425 become unusable by other process. Similarly, if the process has
426 acquired a lock or semaphore etc. then terminating it is liable to
427 cause other processes to deadlock.
428
Richard Oudkerkacfbe222013-06-24 15:41:36 +0100429 Note that the :meth:`start`, :meth:`join`, :meth:`is_alive`,
430 :meth:`terminate` and :attr:`exitcode` methods should only be called by
431 the process that created the process object.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000432
R. David Murray636b23a2009-04-28 16:08:18 +0000433 Example usage of some of the methods of :class:`Process`:
434
435 .. doctest::
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000436
Georg Brandl19cc9442008-10-16 21:36:39 +0000437 >>> import multiprocessing, time, signal
438 >>> p = multiprocessing.Process(target=time.sleep, args=(1000,))
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000439 >>> print p, p.is_alive()
440 <Process(Process-1, initial)> False
441 >>> p.start()
442 >>> print p, p.is_alive()
443 <Process(Process-1, started)> True
444 >>> p.terminate()
R. David Murray636b23a2009-04-28 16:08:18 +0000445 >>> time.sleep(0.1)
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000446 >>> print p, p.is_alive()
447 <Process(Process-1, stopped[SIGTERM])> False
Benjamin Peterson73641d72008-08-20 14:07:59 +0000448 >>> p.exitcode == -signal.SIGTERM
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000449 True
450
451
452.. exception:: BufferTooShort
453
454 Exception raised by :meth:`Connection.recv_bytes_into()` when the supplied
455 buffer object is too small for the message read.
456
457 If ``e`` is an instance of :exc:`BufferTooShort` then ``e.args[0]`` will give
458 the message as a byte string.
459
460
461Pipes and Queues
462~~~~~~~~~~~~~~~~
463
464When using multiple processes, one generally uses message passing for
465communication between processes and avoids having to use any synchronization
466primitives like locks.
467
468For passing messages one can use :func:`Pipe` (for a connection between two
469processes) or a queue (which allows multiple producers and consumers).
470
Sandro Tosi8b48c662012-02-25 19:35:16 +0100471The :class:`~multiprocessing.Queue`, :class:`multiprocessing.queues.SimpleQueue` and :class:`JoinableQueue` types are multi-producer,
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000472multi-consumer FIFO queues modelled on the :class:`Queue.Queue` class in the
Sandro Tosi8b48c662012-02-25 19:35:16 +0100473standard library. They differ in that :class:`~multiprocessing.Queue` lacks the
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000474:meth:`~Queue.Queue.task_done` and :meth:`~Queue.Queue.join` methods introduced
475into Python 2.5's :class:`Queue.Queue` class.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000476
477If you use :class:`JoinableQueue` then you **must** call
478:meth:`JoinableQueue.task_done` for each task removed from the queue or else the
Eli Bendersky4b76f8a2011-12-31 07:05:12 +0200479semaphore used to count the number of unfinished tasks may eventually overflow,
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000480raising an exception.
481
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000482Note that one can also create a shared queue by using a manager object -- see
483:ref:`multiprocessing-managers`.
484
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000485.. note::
486
487 :mod:`multiprocessing` uses the usual :exc:`Queue.Empty` and
488 :exc:`Queue.Full` exceptions to signal a timeout. They are not available in
489 the :mod:`multiprocessing` namespace so you need to import them from
490 :mod:`Queue`.
491
Richard Oudkerk56e968c2013-06-24 14:45:24 +0100492.. note::
493
494 When an object is put on a queue, the object is pickled and a
495 background thread later flushes the pickled data to an underlying
496 pipe. This has some consequences which are a little surprising,
Richard Oudkerk2cc73e82013-06-24 18:11:21 +0100497 but should not cause any practical difficulties -- if they really
498 bother you then you can instead use a queue created with a
499 :ref:`manager <multiprocessing-managers>`.
Richard Oudkerk56e968c2013-06-24 14:45:24 +0100500
501 (1) After putting an object on an empty queue there may be an
Richard Oudkerk66e0a042013-06-24 20:38:22 +0100502 infinitesimal delay before the queue's :meth:`~Queue.empty`
Richard Oudkerk56e968c2013-06-24 14:45:24 +0100503 method returns :const:`False` and :meth:`~Queue.get_nowait` can
504 return without raising :exc:`Queue.Empty`.
505
506 (2) If multiple processes are enqueuing objects, it is possible for
507 the objects to be received at the other end out-of-order.
508 However, objects enqueued by the same process will always be in
509 the expected order with respect to each other.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000510
511.. warning::
512
513 If a process is killed using :meth:`Process.terminate` or :func:`os.kill`
Sandro Tosi8b48c662012-02-25 19:35:16 +0100514 while it is trying to use a :class:`~multiprocessing.Queue`, then the data in the queue is
Eli Bendersky4b76f8a2011-12-31 07:05:12 +0200515 likely to become corrupted. This may cause any other process to get an
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000516 exception when it tries to use the queue later on.
517
518.. warning::
519
520 As mentioned above, if a child process has put items on a queue (and it has
521 not used :meth:`JoinableQueue.cancel_join_thread`), then that process will
522 not terminate until all buffered items have been flushed to the pipe.
523
524 This means that if you try joining that process you may get a deadlock unless
525 you are sure that all items which have been put on the queue have been
526 consumed. Similarly, if the child process is non-daemonic then the parent
Andrew M. Kuchlingded01d12008-07-14 00:35:32 +0000527 process may hang on exit when it tries to join all its non-daemonic children.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000528
529 Note that a queue created using a manager does not have this issue. See
530 :ref:`multiprocessing-programming`.
531
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000532For an example of the usage of queues for interprocess communication see
533:ref:`multiprocessing-examples`.
534
535
536.. function:: Pipe([duplex])
537
538 Returns a pair ``(conn1, conn2)`` of :class:`Connection` objects representing
539 the ends of a pipe.
540
541 If *duplex* is ``True`` (the default) then the pipe is bidirectional. If
542 *duplex* is ``False`` then the pipe is unidirectional: ``conn1`` can only be
543 used for receiving messages and ``conn2`` can only be used for sending
544 messages.
545
546
547.. class:: Queue([maxsize])
548
549 Returns a process shared queue implemented using a pipe and a few
550 locks/semaphores. When a process first puts an item on the queue a feeder
551 thread is started which transfers objects from a buffer into the pipe.
552
553 The usual :exc:`Queue.Empty` and :exc:`Queue.Full` exceptions from the
554 standard library's :mod:`Queue` module are raised to signal timeouts.
555
Sandro Tosi8b48c662012-02-25 19:35:16 +0100556 :class:`~multiprocessing.Queue` implements all the methods of :class:`Queue.Queue` except for
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000557 :meth:`~Queue.Queue.task_done` and :meth:`~Queue.Queue.join`.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000558
559 .. method:: qsize()
560
561 Return the approximate size of the queue. Because of
562 multithreading/multiprocessing semantics, this number is not reliable.
563
564 Note that this may raise :exc:`NotImplementedError` on Unix platforms like
Georg Brandl9af94982008-09-13 17:41:16 +0000565 Mac OS X where ``sem_getvalue()`` is not implemented.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000566
567 .. method:: empty()
568
569 Return ``True`` if the queue is empty, ``False`` otherwise. Because of
570 multithreading/multiprocessing semantics, this is not reliable.
571
572 .. method:: full()
573
574 Return ``True`` if the queue is full, ``False`` otherwise. Because of
575 multithreading/multiprocessing semantics, this is not reliable.
576
Senthil Kumaran9541f8e2011-09-06 00:23:10 +0800577 .. method:: put(obj[, block[, timeout]])
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000578
Senthil Kumaran9541f8e2011-09-06 00:23:10 +0800579 Put obj into the queue. If the optional argument *block* is ``True``
Andrew M. Kuchlingbe504f12008-06-19 19:48:42 +0000580 (the default) and *timeout* is ``None`` (the default), block if necessary until
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000581 a free slot is available. If *timeout* is a positive number, it blocks at
582 most *timeout* seconds and raises the :exc:`Queue.Full` exception if no
583 free slot was available within that time. Otherwise (*block* is
584 ``False``), put an item on the queue if a free slot is immediately
585 available, else raise the :exc:`Queue.Full` exception (*timeout* is
586 ignored in that case).
587
Senthil Kumaran9541f8e2011-09-06 00:23:10 +0800588 .. method:: put_nowait(obj)
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000589
Senthil Kumaran9541f8e2011-09-06 00:23:10 +0800590 Equivalent to ``put(obj, False)``.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000591
592 .. method:: get([block[, timeout]])
593
594 Remove and return an item from the queue. If optional args *block* is
595 ``True`` (the default) and *timeout* is ``None`` (the default), block if
596 necessary until an item is available. If *timeout* is a positive number,
597 it blocks at most *timeout* seconds and raises the :exc:`Queue.Empty`
598 exception if no item was available within that time. Otherwise (block is
599 ``False``), return an item if one is immediately available, else raise the
600 :exc:`Queue.Empty` exception (*timeout* is ignored in that case).
601
602 .. method:: get_nowait()
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000603
604 Equivalent to ``get(False)``.
605
Sandro Tosi8b48c662012-02-25 19:35:16 +0100606 :class:`~multiprocessing.Queue` has a few additional methods not found in
Andrew M. Kuchlingded01d12008-07-14 00:35:32 +0000607 :class:`Queue.Queue`. These methods are usually unnecessary for most
608 code:
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000609
610 .. method:: close()
611
612 Indicate that no more data will be put on this queue by the current
613 process. The background thread will quit once it has flushed all buffered
614 data to the pipe. This is called automatically when the queue is garbage
615 collected.
616
617 .. method:: join_thread()
618
619 Join the background thread. This can only be used after :meth:`close` has
620 been called. It blocks until the background thread exits, ensuring that
621 all data in the buffer has been flushed to the pipe.
622
623 By default if a process is not the creator of the queue then on exit it
624 will attempt to join the queue's background thread. The process can call
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000625 :meth:`cancel_join_thread` to make :meth:`join_thread` do nothing.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000626
627 .. method:: cancel_join_thread()
628
629 Prevent :meth:`join_thread` from blocking. In particular, this prevents
630 the background thread from being joined automatically when the process
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000631 exits -- see :meth:`join_thread`.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000632
633
Sandro Tosic0b11722012-02-15 22:39:52 +0100634.. class:: multiprocessing.queues.SimpleQueue()
635
Sandro Tosi8b48c662012-02-25 19:35:16 +0100636 It is a simplified :class:`~multiprocessing.Queue` type, very close to a locked :class:`Pipe`.
Sandro Tosic0b11722012-02-15 22:39:52 +0100637
638 .. method:: empty()
639
640 Return ``True`` if the queue is empty, ``False`` otherwise.
641
642 .. method:: get()
643
644 Remove and return an item from the queue.
645
646 .. method:: put(item)
647
648 Put *item* into the queue.
649
650
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000651.. class:: JoinableQueue([maxsize])
652
Sandro Tosi8b48c662012-02-25 19:35:16 +0100653 :class:`JoinableQueue`, a :class:`~multiprocessing.Queue` subclass, is a queue which
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000654 additionally has :meth:`task_done` and :meth:`join` methods.
655
656 .. method:: task_done()
657
658 Indicate that a formerly enqueued task is complete. Used by queue consumer
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000659 threads. For each :meth:`~Queue.get` used to fetch a task, a subsequent
660 call to :meth:`task_done` tells the queue that the processing on the task
661 is complete.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000662
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000663 If a :meth:`~Queue.join` is currently blocking, it will resume when all
664 items have been processed (meaning that a :meth:`task_done` call was
665 received for every item that had been :meth:`~Queue.put` into the queue).
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000666
667 Raises a :exc:`ValueError` if called more times than there were items
668 placed in the queue.
669
670
671 .. method:: join()
672
673 Block until all items in the queue have been gotten and processed.
674
675 The count of unfinished tasks goes up whenever an item is added to the
676 queue. The count goes down whenever a consumer thread calls
677 :meth:`task_done` to indicate that the item was retrieved and all work on
678 it is complete. When the count of unfinished tasks drops to zero,
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000679 :meth:`~Queue.join` unblocks.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000680
681
682Miscellaneous
683~~~~~~~~~~~~~
684
685.. function:: active_children()
686
687 Return list of all live children of the current process.
688
689 Calling this has the side affect of "joining" any processes which have
690 already finished.
691
692.. function:: cpu_count()
693
694 Return the number of CPUs in the system. May raise
695 :exc:`NotImplementedError`.
696
697.. function:: current_process()
698
699 Return the :class:`Process` object corresponding to the current process.
700
701 An analogue of :func:`threading.current_thread`.
702
703.. function:: freeze_support()
704
705 Add support for when a program which uses :mod:`multiprocessing` has been
706 frozen to produce a Windows executable. (Has been tested with **py2exe**,
707 **PyInstaller** and **cx_Freeze**.)
708
709 One needs to call this function straight after the ``if __name__ ==
710 '__main__'`` line of the main module. For example::
711
712 from multiprocessing import Process, freeze_support
713
714 def f():
715 print 'hello world!'
716
717 if __name__ == '__main__':
718 freeze_support()
719 Process(target=f).start()
720
R. David Murray636b23a2009-04-28 16:08:18 +0000721 If the ``freeze_support()`` line is omitted then trying to run the frozen
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000722 executable will raise :exc:`RuntimeError`.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000723
724 If the module is being run normally by the Python interpreter then
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000725 :func:`freeze_support` has no effect.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000726
727.. function:: set_executable()
728
Ezio Melotti062d2b52009-12-19 22:41:49 +0000729 Sets the path of the Python interpreter to use when starting a child process.
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000730 (By default :data:`sys.executable` is used). Embedders will probably need to
731 do some thing like ::
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000732
Eli Bendersky4b76f8a2011-12-31 07:05:12 +0200733 set_executable(os.path.join(sys.exec_prefix, 'pythonw.exe'))
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000734
R. David Murray636b23a2009-04-28 16:08:18 +0000735 before they can create child processes. (Windows only)
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000736
737
738.. note::
739
740 :mod:`multiprocessing` contains no analogues of
741 :func:`threading.active_count`, :func:`threading.enumerate`,
742 :func:`threading.settrace`, :func:`threading.setprofile`,
743 :class:`threading.Timer`, or :class:`threading.local`.
744
745
746Connection Objects
747~~~~~~~~~~~~~~~~~~
748
749Connection objects allow the sending and receiving of picklable objects or
750strings. They can be thought of as message oriented connected sockets.
751
Eli Bendersky4b76f8a2011-12-31 07:05:12 +0200752Connection objects are usually created using :func:`Pipe` -- see also
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000753:ref:`multiprocessing-listeners-clients`.
754
755.. class:: Connection
756
757 .. method:: send(obj)
758
759 Send an object to the other end of the connection which should be read
760 using :meth:`recv`.
761
Jesse Noller5053fbb2009-04-02 04:22:09 +0000762 The object must be picklable. Very large pickles (approximately 32 MB+,
Eli Bendersky4b76f8a2011-12-31 07:05:12 +0200763 though it depends on the OS) may raise a :exc:`ValueError` exception.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000764
765 .. method:: recv()
766
767 Return an object sent from the other end of the connection using
Sandro Tosif788cf72012-01-07 17:56:43 +0100768 :meth:`send`. Blocks until there its something to receive. Raises
769 :exc:`EOFError` if there is nothing left to receive
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000770 and the other end was closed.
771
772 .. method:: fileno()
773
Eli Bendersky4b76f8a2011-12-31 07:05:12 +0200774 Return the file descriptor or handle used by the connection.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000775
776 .. method:: close()
777
778 Close the connection.
779
780 This is called automatically when the connection is garbage collected.
781
782 .. method:: poll([timeout])
783
784 Return whether there is any data available to be read.
785
786 If *timeout* is not specified then it will return immediately. If
787 *timeout* is a number then this specifies the maximum time in seconds to
788 block. If *timeout* is ``None`` then an infinite timeout is used.
789
790 .. method:: send_bytes(buffer[, offset[, size]])
791
792 Send byte data from an object supporting the buffer interface as a
793 complete message.
794
795 If *offset* is given then data is read from that position in *buffer*. If
Jesse Noller5053fbb2009-04-02 04:22:09 +0000796 *size* is given then that many bytes will be read from buffer. Very large
797 buffers (approximately 32 MB+, though it depends on the OS) may raise a
Eli Bendersky4b76f8a2011-12-31 07:05:12 +0200798 :exc:`ValueError` exception
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000799
800 .. method:: recv_bytes([maxlength])
801
802 Return a complete message of byte data sent from the other end of the
Sandro Tosif788cf72012-01-07 17:56:43 +0100803 connection as a string. Blocks until there is something to receive.
804 Raises :exc:`EOFError` if there is nothing left
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000805 to receive and the other end has closed.
806
807 If *maxlength* is specified and the message is longer than *maxlength*
808 then :exc:`IOError` is raised and the connection will no longer be
809 readable.
810
811 .. method:: recv_bytes_into(buffer[, offset])
812
813 Read into *buffer* a complete message of byte data sent from the other end
Sandro Tosif788cf72012-01-07 17:56:43 +0100814 of the connection and return the number of bytes in the message. Blocks
815 until there is something to receive. Raises
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000816 :exc:`EOFError` if there is nothing left to receive and the other end was
817 closed.
818
819 *buffer* must be an object satisfying the writable buffer interface. If
820 *offset* is given then the message will be written into the buffer from
R. David Murray636b23a2009-04-28 16:08:18 +0000821 that position. Offset must be a non-negative integer less than the
822 length of *buffer* (in bytes).
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000823
824 If the buffer is too short then a :exc:`BufferTooShort` exception is
825 raised and the complete message is available as ``e.args[0]`` where ``e``
826 is the exception instance.
827
828
829For example:
830
R. David Murray636b23a2009-04-28 16:08:18 +0000831.. doctest::
832
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000833 >>> from multiprocessing import Pipe
834 >>> a, b = Pipe()
835 >>> a.send([1, 'hello', None])
836 >>> b.recv()
837 [1, 'hello', None]
838 >>> b.send_bytes('thank you')
839 >>> a.recv_bytes()
840 'thank you'
841 >>> import array
842 >>> arr1 = array.array('i', range(5))
843 >>> arr2 = array.array('i', [0] * 10)
844 >>> a.send_bytes(arr1)
845 >>> count = b.recv_bytes_into(arr2)
846 >>> assert count == len(arr1) * arr1.itemsize
847 >>> arr2
848 array('i', [0, 1, 2, 3, 4, 0, 0, 0, 0, 0])
849
850
851.. warning::
852
853 The :meth:`Connection.recv` method automatically unpickles the data it
854 receives, which can be a security risk unless you can trust the process
855 which sent the message.
856
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000857 Therefore, unless the connection object was produced using :func:`Pipe` you
858 should only use the :meth:`~Connection.recv` and :meth:`~Connection.send`
859 methods after performing some sort of authentication. See
860 :ref:`multiprocessing-auth-keys`.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000861
862.. warning::
863
864 If a process is killed while it is trying to read or write to a pipe then
865 the data in the pipe is likely to become corrupted, because it may become
866 impossible to be sure where the message boundaries lie.
867
868
869Synchronization primitives
870~~~~~~~~~~~~~~~~~~~~~~~~~~
871
872Generally synchronization primitives are not as necessary in a multiprocess
Andrew M. Kuchling8ea605c2008-07-14 01:18:16 +0000873program as they are in a multithreaded program. See the documentation for
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000874:mod:`threading` module.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000875
876Note that one can also create synchronization primitives by using a manager
877object -- see :ref:`multiprocessing-managers`.
878
879.. class:: BoundedSemaphore([value])
880
881 A bounded semaphore object: a clone of :class:`threading.BoundedSemaphore`.
882
Georg Brandl042d6a42010-05-21 21:47:05 +0000883 (On Mac OS X, this is indistinguishable from :class:`Semaphore` because
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000884 ``sem_getvalue()`` is not implemented on that platform).
885
886.. class:: Condition([lock])
887
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000888 A condition variable: a clone of :class:`threading.Condition`.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000889
890 If *lock* is specified then it should be a :class:`Lock` or :class:`RLock`
891 object from :mod:`multiprocessing`.
892
893.. class:: Event()
894
895 A clone of :class:`threading.Event`.
Jesse Noller02cb0eb2009-04-01 03:45:50 +0000896 This method returns the state of the internal semaphore on exit, so it
897 will always return ``True`` except if a timeout is given and the operation
898 times out.
899
900 .. versionchanged:: 2.7
901 Previously, the method always returned ``None``.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000902
903.. class:: Lock()
904
905 A non-recursive lock object: a clone of :class:`threading.Lock`.
906
907.. class:: RLock()
908
909 A recursive lock object: a clone of :class:`threading.RLock`.
910
911.. class:: Semaphore([value])
912
Ross Lagerwalla3ed3f02011-03-14 10:43:36 +0200913 A semaphore object: a clone of :class:`threading.Semaphore`.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000914
915.. note::
916
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000917 The :meth:`acquire` method of :class:`BoundedSemaphore`, :class:`Lock`,
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000918 :class:`RLock` and :class:`Semaphore` has a timeout parameter not supported
919 by the equivalents in :mod:`threading`. The signature is
920 ``acquire(block=True, timeout=None)`` with keyword parameters being
921 acceptable. If *block* is ``True`` and *timeout* is not ``None`` then it
922 specifies a timeout in seconds. If *block* is ``False`` then *timeout* is
923 ignored.
Georg Brandlc62ef8b2009-01-03 20:55:06 +0000924
Georg Brandl042d6a42010-05-21 21:47:05 +0000925 On Mac OS X, ``sem_timedwait`` is unsupported, so calling ``acquire()`` with
926 a timeout will emulate that function's behavior using a sleeping loop.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000927
928.. note::
929
930 If the SIGINT signal generated by Ctrl-C arrives while the main thread is
931 blocked by a call to :meth:`BoundedSemaphore.acquire`, :meth:`Lock.acquire`,
932 :meth:`RLock.acquire`, :meth:`Semaphore.acquire`, :meth:`Condition.acquire`
933 or :meth:`Condition.wait` then the call will be immediately interrupted and
934 :exc:`KeyboardInterrupt` will be raised.
935
936 This differs from the behaviour of :mod:`threading` where SIGINT will be
937 ignored while the equivalent blocking calls are in progress.
938
939
940Shared :mod:`ctypes` Objects
941~~~~~~~~~~~~~~~~~~~~~~~~~~~~
942
943It is possible to create shared objects using shared memory which can be
944inherited by child processes.
945
Jesse Noller6ab22152009-01-18 02:45:38 +0000946.. function:: Value(typecode_or_type, *args[, lock])
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000947
948 Return a :mod:`ctypes` object allocated from shared memory. By default the
949 return value is actually a synchronized wrapper for the object.
950
951 *typecode_or_type* determines the type of the returned object: it is either a
952 ctypes type or a one character typecode of the kind used by the :mod:`array`
953 module. *\*args* is passed on to the constructor for the type.
954
955 If *lock* is ``True`` (the default) then a new lock object is created to
956 synchronize access to the value. If *lock* is a :class:`Lock` or
957 :class:`RLock` object then that will be used to synchronize access to the
958 value. If *lock* is ``False`` then access to the returned object will not be
959 automatically protected by a lock, so it will not necessarily be
960 "process-safe".
961
962 Note that *lock* is a keyword-only argument.
963
964.. function:: Array(typecode_or_type, size_or_initializer, *, lock=True)
965
966 Return a ctypes array allocated from shared memory. By default the return
967 value is actually a synchronized wrapper for the array.
968
969 *typecode_or_type* determines the type of the elements of the returned array:
970 it is either a ctypes type or a one character typecode of the kind used by
971 the :mod:`array` module. If *size_or_initializer* is an integer, then it
972 determines the length of the array, and the array will be initially zeroed.
973 Otherwise, *size_or_initializer* is a sequence which is used to initialize
974 the array and whose length determines the length of the array.
975
976 If *lock* is ``True`` (the default) then a new lock object is created to
977 synchronize access to the value. If *lock* is a :class:`Lock` or
978 :class:`RLock` object then that will be used to synchronize access to the
979 value. If *lock* is ``False`` then access to the returned object will not be
980 automatically protected by a lock, so it will not necessarily be
981 "process-safe".
982
983 Note that *lock* is a keyword only argument.
984
Georg Brandlb053f992008-11-22 08:34:14 +0000985 Note that an array of :data:`ctypes.c_char` has *value* and *raw*
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000986 attributes which allow one to use it to store and retrieve strings.
987
988
989The :mod:`multiprocessing.sharedctypes` module
990>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
991
992.. module:: multiprocessing.sharedctypes
993 :synopsis: Allocate ctypes objects from shared memory.
994
995The :mod:`multiprocessing.sharedctypes` module provides functions for allocating
996:mod:`ctypes` objects from shared memory which can be inherited by child
997processes.
998
999.. note::
1000
Benjamin Peterson90f36732008-07-12 20:16:19 +00001001 Although it is possible to store a pointer in shared memory remember that
1002 this will refer to a location in the address space of a specific process.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001003 However, the pointer is quite likely to be invalid in the context of a second
1004 process and trying to dereference the pointer from the second process may
1005 cause a crash.
1006
1007.. function:: RawArray(typecode_or_type, size_or_initializer)
1008
1009 Return a ctypes array allocated from shared memory.
1010
1011 *typecode_or_type* determines the type of the elements of the returned array:
1012 it is either a ctypes type or a one character typecode of the kind used by
1013 the :mod:`array` module. If *size_or_initializer* is an integer then it
1014 determines the length of the array, and the array will be initially zeroed.
1015 Otherwise *size_or_initializer* is a sequence which is used to initialize the
1016 array and whose length determines the length of the array.
1017
1018 Note that setting and getting an element is potentially non-atomic -- use
1019 :func:`Array` instead to make sure that access is automatically synchronized
1020 using a lock.
1021
1022.. function:: RawValue(typecode_or_type, *args)
1023
1024 Return a ctypes object allocated from shared memory.
1025
1026 *typecode_or_type* determines the type of the returned object: it is either a
1027 ctypes type or a one character typecode of the kind used by the :mod:`array`
Jesse Noller6ab22152009-01-18 02:45:38 +00001028 module. *\*args* is passed on to the constructor for the type.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001029
1030 Note that setting and getting the value is potentially non-atomic -- use
1031 :func:`Value` instead to make sure that access is automatically synchronized
1032 using a lock.
1033
Georg Brandlb053f992008-11-22 08:34:14 +00001034 Note that an array of :data:`ctypes.c_char` has ``value`` and ``raw``
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001035 attributes which allow one to use it to store and retrieve strings -- see
1036 documentation for :mod:`ctypes`.
1037
Jesse Noller6ab22152009-01-18 02:45:38 +00001038.. function:: Array(typecode_or_type, size_or_initializer, *args[, lock])
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001039
1040 The same as :func:`RawArray` except that depending on the value of *lock* a
1041 process-safe synchronization wrapper may be returned instead of a raw ctypes
1042 array.
1043
1044 If *lock* is ``True`` (the default) then a new lock object is created to
1045 synchronize access to the value. If *lock* is a :class:`Lock` or
1046 :class:`RLock` object then that will be used to synchronize access to the
1047 value. If *lock* is ``False`` then access to the returned object will not be
1048 automatically protected by a lock, so it will not necessarily be
1049 "process-safe".
1050
1051 Note that *lock* is a keyword-only argument.
1052
1053.. function:: Value(typecode_or_type, *args[, lock])
1054
1055 The same as :func:`RawValue` except that depending on the value of *lock* a
1056 process-safe synchronization wrapper may be returned instead of a raw ctypes
1057 object.
1058
1059 If *lock* is ``True`` (the default) then a new lock object is created to
1060 synchronize access to the value. If *lock* is a :class:`Lock` or
1061 :class:`RLock` object then that will be used to synchronize access to the
1062 value. If *lock* is ``False`` then access to the returned object will not be
1063 automatically protected by a lock, so it will not necessarily be
1064 "process-safe".
1065
1066 Note that *lock* is a keyword-only argument.
1067
1068.. function:: copy(obj)
1069
1070 Return a ctypes object allocated from shared memory which is a copy of the
1071 ctypes object *obj*.
1072
1073.. function:: synchronized(obj[, lock])
1074
1075 Return a process-safe wrapper object for a ctypes object which uses *lock* to
1076 synchronize access. If *lock* is ``None`` (the default) then a
1077 :class:`multiprocessing.RLock` object is created automatically.
1078
1079 A synchronized wrapper will have two methods in addition to those of the
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001080 object it wraps: :meth:`get_obj` returns the wrapped object and
1081 :meth:`get_lock` returns the lock object used for synchronization.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001082
1083 Note that accessing the ctypes object through the wrapper can be a lot slower
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001084 than accessing the raw ctypes object.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001085
1086
1087The table below compares the syntax for creating shared ctypes objects from
1088shared memory with the normal ctypes syntax. (In the table ``MyStruct`` is some
1089subclass of :class:`ctypes.Structure`.)
1090
1091==================== ========================== ===========================
1092ctypes sharedctypes using type sharedctypes using typecode
1093==================== ========================== ===========================
1094c_double(2.4) RawValue(c_double, 2.4) RawValue('d', 2.4)
1095MyStruct(4, 6) RawValue(MyStruct, 4, 6)
1096(c_short * 7)() RawArray(c_short, 7) RawArray('h', 7)
1097(c_int * 3)(9, 2, 8) RawArray(c_int, (9, 2, 8)) RawArray('i', (9, 2, 8))
1098==================== ========================== ===========================
1099
1100
1101Below is an example where a number of ctypes objects are modified by a child
1102process::
1103
1104 from multiprocessing import Process, Lock
1105 from multiprocessing.sharedctypes import Value, Array
1106 from ctypes import Structure, c_double
1107
1108 class Point(Structure):
1109 _fields_ = [('x', c_double), ('y', c_double)]
1110
1111 def modify(n, x, s, A):
1112 n.value **= 2
1113 x.value **= 2
1114 s.value = s.value.upper()
1115 for a in A:
1116 a.x **= 2
1117 a.y **= 2
1118
1119 if __name__ == '__main__':
1120 lock = Lock()
1121
1122 n = Value('i', 7)
R. David Murray636b23a2009-04-28 16:08:18 +00001123 x = Value(c_double, 1.0/3.0, lock=False)
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001124 s = Array('c', 'hello world', lock=lock)
1125 A = Array(Point, [(1.875,-6.25), (-5.75,2.0), (2.375,9.5)], lock=lock)
1126
1127 p = Process(target=modify, args=(n, x, s, A))
1128 p.start()
1129 p.join()
1130
1131 print n.value
1132 print x.value
1133 print s.value
1134 print [(a.x, a.y) for a in A]
1135
1136
1137.. highlightlang:: none
1138
1139The results printed are ::
1140
1141 49
1142 0.1111111111111111
1143 HELLO WORLD
1144 [(3.515625, 39.0625), (33.0625, 4.0), (5.640625, 90.25)]
1145
1146.. highlightlang:: python
1147
1148
1149.. _multiprocessing-managers:
1150
1151Managers
1152~~~~~~~~
1153
1154Managers provide a way to create data which can be shared between different
1155processes. A manager object controls a server process which manages *shared
1156objects*. Other processes can access the shared objects by using proxies.
1157
1158.. function:: multiprocessing.Manager()
1159
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001160 Returns a started :class:`~multiprocessing.managers.SyncManager` object which
1161 can be used for sharing objects between processes. The returned manager
1162 object corresponds to a spawned child process and has methods which will
1163 create shared objects and return corresponding proxies.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001164
1165.. module:: multiprocessing.managers
1166 :synopsis: Share data between process with shared objects.
1167
1168Manager processes will be shutdown as soon as they are garbage collected or
1169their parent process exits. The manager classes are defined in the
1170:mod:`multiprocessing.managers` module:
1171
1172.. class:: BaseManager([address[, authkey]])
1173
1174 Create a BaseManager object.
1175
Jack Diederich1605b332010-02-23 17:23:30 +00001176 Once created one should call :meth:`start` or ``get_server().serve_forever()`` to ensure
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001177 that the manager object refers to a started manager process.
1178
1179 *address* is the address on which the manager process listens for new
1180 connections. If *address* is ``None`` then an arbitrary one is chosen.
1181
1182 *authkey* is the authentication key which will be used to check the validity
1183 of incoming connections to the server process. If *authkey* is ``None`` then
Benjamin Peterson73641d72008-08-20 14:07:59 +00001184 ``current_process().authkey``. Otherwise *authkey* is used and it
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001185 must be a string.
1186
Jesse Noller7152f6d2009-04-02 05:17:26 +00001187 .. method:: start([initializer[, initargs]])
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001188
Jesse Noller7152f6d2009-04-02 05:17:26 +00001189 Start a subprocess to start the manager. If *initializer* is not ``None``
1190 then the subprocess will call ``initializer(*initargs)`` when it starts.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001191
Jesse Nollera280fd72008-11-28 18:22:54 +00001192 .. method:: get_server()
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001193
Jesse Nollera280fd72008-11-28 18:22:54 +00001194 Returns a :class:`Server` object which represents the actual server under
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001195 the control of the Manager. The :class:`Server` object supports the
R. David Murray636b23a2009-04-28 16:08:18 +00001196 :meth:`serve_forever` method::
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001197
Georg Brandlfc29f272009-01-02 20:25:14 +00001198 >>> from multiprocessing.managers import BaseManager
R. David Murray636b23a2009-04-28 16:08:18 +00001199 >>> manager = BaseManager(address=('', 50000), authkey='abc')
1200 >>> server = manager.get_server()
1201 >>> server.serve_forever()
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001202
R. David Murray636b23a2009-04-28 16:08:18 +00001203 :class:`Server` additionally has an :attr:`address` attribute.
Jesse Nollera280fd72008-11-28 18:22:54 +00001204
1205 .. method:: connect()
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001206
R. David Murray636b23a2009-04-28 16:08:18 +00001207 Connect a local manager object to a remote manager process::
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001208
Jesse Nollera280fd72008-11-28 18:22:54 +00001209 >>> from multiprocessing.managers import BaseManager
R. David Murray636b23a2009-04-28 16:08:18 +00001210 >>> m = BaseManager(address=('127.0.0.1', 5000), authkey='abc')
Jesse Nollera280fd72008-11-28 18:22:54 +00001211 >>> m.connect()
1212
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001213 .. method:: shutdown()
1214
1215 Stop the process used by the manager. This is only available if
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001216 :meth:`start` has been used to start the server process.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001217
1218 This can be called multiple times.
1219
1220 .. method:: register(typeid[, callable[, proxytype[, exposed[, method_to_typeid[, create_method]]]]])
1221
1222 A classmethod which can be used for registering a type or callable with
1223 the manager class.
1224
1225 *typeid* is a "type identifier" which is used to identify a particular
1226 type of shared object. This must be a string.
1227
1228 *callable* is a callable used for creating objects for this type
1229 identifier. If a manager instance will be created using the
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001230 :meth:`from_address` classmethod or if the *create_method* argument is
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001231 ``False`` then this can be left as ``None``.
1232
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001233 *proxytype* is a subclass of :class:`BaseProxy` which is used to create
1234 proxies for shared objects with this *typeid*. If ``None`` then a proxy
1235 class is created automatically.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001236
1237 *exposed* is used to specify a sequence of method names which proxies for
1238 this typeid should be allowed to access using
1239 :meth:`BaseProxy._callMethod`. (If *exposed* is ``None`` then
1240 :attr:`proxytype._exposed_` is used instead if it exists.) In the case
1241 where no exposed list is specified, all "public methods" of the shared
1242 object will be accessible. (Here a "public method" means any attribute
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001243 which has a :meth:`__call__` method and whose name does not begin with
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001244 ``'_'``.)
1245
1246 *method_to_typeid* is a mapping used to specify the return type of those
1247 exposed methods which should return a proxy. It maps method names to
1248 typeid strings. (If *method_to_typeid* is ``None`` then
1249 :attr:`proxytype._method_to_typeid_` is used instead if it exists.) If a
1250 method's name is not a key of this mapping or if the mapping is ``None``
1251 then the object returned by the method will be copied by value.
1252
1253 *create_method* determines whether a method should be created with name
1254 *typeid* which can be used to tell the server process to create a new
1255 shared object and return a proxy for it. By default it is ``True``.
1256
1257 :class:`BaseManager` instances also have one read-only property:
1258
1259 .. attribute:: address
1260
1261 The address used by the manager.
1262
1263
1264.. class:: SyncManager
1265
1266 A subclass of :class:`BaseManager` which can be used for the synchronization
1267 of processes. Objects of this type are returned by
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001268 :func:`multiprocessing.Manager`.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001269
1270 It also supports creation of shared lists and dictionaries.
1271
1272 .. method:: BoundedSemaphore([value])
1273
1274 Create a shared :class:`threading.BoundedSemaphore` object and return a
1275 proxy for it.
1276
1277 .. method:: Condition([lock])
1278
1279 Create a shared :class:`threading.Condition` object and return a proxy for
1280 it.
1281
1282 If *lock* is supplied then it should be a proxy for a
1283 :class:`threading.Lock` or :class:`threading.RLock` object.
1284
1285 .. method:: Event()
1286
1287 Create a shared :class:`threading.Event` object and return a proxy for it.
1288
1289 .. method:: Lock()
1290
1291 Create a shared :class:`threading.Lock` object and return a proxy for it.
1292
1293 .. method:: Namespace()
1294
1295 Create a shared :class:`Namespace` object and return a proxy for it.
1296
1297 .. method:: Queue([maxsize])
1298
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001299 Create a shared :class:`Queue.Queue` object and return a proxy for it.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001300
1301 .. method:: RLock()
1302
1303 Create a shared :class:`threading.RLock` object and return a proxy for it.
1304
1305 .. method:: Semaphore([value])
1306
1307 Create a shared :class:`threading.Semaphore` object and return a proxy for
1308 it.
1309
1310 .. method:: Array(typecode, sequence)
1311
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001312 Create an array and return a proxy for it.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001313
1314 .. method:: Value(typecode, value)
1315
1316 Create an object with a writable ``value`` attribute and return a proxy
1317 for it.
1318
1319 .. method:: dict()
1320 dict(mapping)
1321 dict(sequence)
1322
1323 Create a shared ``dict`` object and return a proxy for it.
1324
1325 .. method:: list()
1326 list(sequence)
1327
1328 Create a shared ``list`` object and return a proxy for it.
1329
Georg Brandl78f11ed2010-11-26 07:34:20 +00001330 .. note::
1331
1332 Modifications to mutable values or items in dict and list proxies will not
1333 be propagated through the manager, because the proxy has no way of knowing
1334 when its values or items are modified. To modify such an item, you can
1335 re-assign the modified object to the container proxy::
1336
1337 # create a list proxy and append a mutable object (a dictionary)
1338 lproxy = manager.list()
1339 lproxy.append({})
1340 # now mutate the dictionary
1341 d = lproxy[0]
1342 d['a'] = 1
1343 d['b'] = 2
1344 # at this point, the changes to d are not yet synced, but by
1345 # reassigning the dictionary, the proxy is notified of the change
1346 lproxy[0] = d
1347
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001348
1349Namespace objects
1350>>>>>>>>>>>>>>>>>
1351
1352A namespace object has no public methods, but does have writable attributes.
1353Its representation shows the values of its attributes.
1354
1355However, when using a proxy for a namespace object, an attribute beginning with
R. David Murray636b23a2009-04-28 16:08:18 +00001356``'_'`` will be an attribute of the proxy and not an attribute of the referent:
1357
1358.. doctest::
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001359
1360 >>> manager = multiprocessing.Manager()
1361 >>> Global = manager.Namespace()
1362 >>> Global.x = 10
1363 >>> Global.y = 'hello'
1364 >>> Global._z = 12.3 # this is an attribute of the proxy
1365 >>> print Global
1366 Namespace(x=10, y='hello')
1367
1368
1369Customized managers
1370>>>>>>>>>>>>>>>>>>>
1371
1372To create one's own manager, one creates a subclass of :class:`BaseManager` and
Eli Bendersky4b76f8a2011-12-31 07:05:12 +02001373uses the :meth:`~BaseManager.register` classmethod to register new types or
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001374callables with the manager class. For example::
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001375
1376 from multiprocessing.managers import BaseManager
1377
1378 class MathsClass(object):
1379 def add(self, x, y):
1380 return x + y
1381 def mul(self, x, y):
1382 return x * y
1383
1384 class MyManager(BaseManager):
1385 pass
1386
1387 MyManager.register('Maths', MathsClass)
1388
1389 if __name__ == '__main__':
1390 manager = MyManager()
1391 manager.start()
1392 maths = manager.Maths()
1393 print maths.add(4, 3) # prints 7
1394 print maths.mul(7, 8) # prints 56
1395
1396
1397Using a remote manager
1398>>>>>>>>>>>>>>>>>>>>>>
1399
1400It is possible to run a manager server on one machine and have clients use it
1401from other machines (assuming that the firewalls involved allow it).
1402
1403Running the following commands creates a server for a single shared queue which
1404remote clients can access::
1405
1406 >>> from multiprocessing.managers import BaseManager
1407 >>> import Queue
1408 >>> queue = Queue.Queue()
1409 >>> class QueueManager(BaseManager): pass
Jesse Nollera280fd72008-11-28 18:22:54 +00001410 >>> QueueManager.register('get_queue', callable=lambda:queue)
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001411 >>> m = QueueManager(address=('', 50000), authkey='abracadabra')
Jesse Nollera280fd72008-11-28 18:22:54 +00001412 >>> s = m.get_server()
R. David Murray636b23a2009-04-28 16:08:18 +00001413 >>> s.serve_forever()
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001414
1415One client can access the server as follows::
1416
1417 >>> from multiprocessing.managers import BaseManager
1418 >>> class QueueManager(BaseManager): pass
Jesse Nollera280fd72008-11-28 18:22:54 +00001419 >>> QueueManager.register('get_queue')
1420 >>> m = QueueManager(address=('foo.bar.org', 50000), authkey='abracadabra')
1421 >>> m.connect()
1422 >>> queue = m.get_queue()
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001423 >>> queue.put('hello')
1424
1425Another client can also use it::
1426
1427 >>> from multiprocessing.managers import BaseManager
1428 >>> class QueueManager(BaseManager): pass
R. David Murray636b23a2009-04-28 16:08:18 +00001429 >>> QueueManager.register('get_queue')
1430 >>> m = QueueManager(address=('foo.bar.org', 50000), authkey='abracadabra')
1431 >>> m.connect()
1432 >>> queue = m.get_queue()
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001433 >>> queue.get()
1434 'hello'
1435
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001436Local processes can also access that queue, using the code from above on the
Jesse Nollera280fd72008-11-28 18:22:54 +00001437client to access it remotely::
1438
1439 >>> from multiprocessing import Process, Queue
1440 >>> from multiprocessing.managers import BaseManager
1441 >>> class Worker(Process):
1442 ... def __init__(self, q):
1443 ... self.q = q
1444 ... super(Worker, self).__init__()
1445 ... def run(self):
1446 ... self.q.put('local hello')
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001447 ...
Jesse Nollera280fd72008-11-28 18:22:54 +00001448 >>> queue = Queue()
1449 >>> w = Worker(queue)
1450 >>> w.start()
1451 >>> class QueueManager(BaseManager): pass
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001452 ...
Jesse Nollera280fd72008-11-28 18:22:54 +00001453 >>> QueueManager.register('get_queue', callable=lambda: queue)
1454 >>> m = QueueManager(address=('', 50000), authkey='abracadabra')
1455 >>> s = m.get_server()
1456 >>> s.serve_forever()
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001457
1458Proxy Objects
1459~~~~~~~~~~~~~
1460
1461A proxy is an object which *refers* to a shared object which lives (presumably)
1462in a different process. The shared object is said to be the *referent* of the
1463proxy. Multiple proxy objects may have the same referent.
1464
1465A proxy object has methods which invoke corresponding methods of its referent
1466(although not every method of the referent will necessarily be available through
1467the proxy). A proxy can usually be used in most of the same ways that its
R. David Murray636b23a2009-04-28 16:08:18 +00001468referent can:
1469
1470.. doctest::
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001471
1472 >>> from multiprocessing import Manager
1473 >>> manager = Manager()
1474 >>> l = manager.list([i*i for i in range(10)])
1475 >>> print l
1476 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1477 >>> print repr(l)
R. David Murray636b23a2009-04-28 16:08:18 +00001478 <ListProxy object, typeid 'list' at 0x...>
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001479 >>> l[4]
1480 16
1481 >>> l[2:5]
1482 [4, 9, 16]
1483
1484Notice that applying :func:`str` to a proxy will return the representation of
1485the referent, whereas applying :func:`repr` will return the representation of
1486the proxy.
1487
1488An important feature of proxy objects is that they are picklable so they can be
1489passed between processes. Note, however, that if a proxy is sent to the
1490corresponding manager's process then unpickling it will produce the referent
R. David Murray636b23a2009-04-28 16:08:18 +00001491itself. This means, for example, that one shared object can contain a second:
1492
1493.. doctest::
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001494
1495 >>> a = manager.list()
1496 >>> b = manager.list()
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001497 >>> a.append(b) # referent of a now contains referent of b
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001498 >>> print a, b
1499 [[]] []
1500 >>> b.append('hello')
1501 >>> print a, b
1502 [['hello']] ['hello']
1503
1504.. note::
1505
1506 The proxy types in :mod:`multiprocessing` do nothing to support comparisons
R. David Murray636b23a2009-04-28 16:08:18 +00001507 by value. So, for instance, we have:
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001508
R. David Murray636b23a2009-04-28 16:08:18 +00001509 .. doctest::
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001510
R. David Murray636b23a2009-04-28 16:08:18 +00001511 >>> manager.list([1,2,3]) == [1,2,3]
1512 False
1513
1514 One should just use a copy of the referent instead when making comparisons.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001515
1516.. class:: BaseProxy
1517
1518 Proxy objects are instances of subclasses of :class:`BaseProxy`.
1519
Benjamin Peterson2b97b712008-12-19 02:31:35 +00001520 .. method:: _callmethod(methodname[, args[, kwds]])
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001521
1522 Call and return the result of a method of the proxy's referent.
1523
1524 If ``proxy`` is a proxy whose referent is ``obj`` then the expression ::
1525
Benjamin Peterson2b97b712008-12-19 02:31:35 +00001526 proxy._callmethod(methodname, args, kwds)
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001527
1528 will evaluate the expression ::
1529
1530 getattr(obj, methodname)(*args, **kwds)
1531
1532 in the manager's process.
1533
1534 The returned value will be a copy of the result of the call or a proxy to
1535 a new shared object -- see documentation for the *method_to_typeid*
1536 argument of :meth:`BaseManager.register`.
1537
Ezio Melotti1e87da12011-10-19 10:39:35 +03001538 If an exception is raised by the call, then is re-raised by
Benjamin Peterson2b97b712008-12-19 02:31:35 +00001539 :meth:`_callmethod`. If some other exception is raised in the manager's
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001540 process then this is converted into a :exc:`RemoteError` exception and is
Benjamin Peterson2b97b712008-12-19 02:31:35 +00001541 raised by :meth:`_callmethod`.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001542
1543 Note in particular that an exception will be raised if *methodname* has
1544 not been *exposed*
1545
R. David Murray636b23a2009-04-28 16:08:18 +00001546 An example of the usage of :meth:`_callmethod`:
1547
1548 .. doctest::
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001549
1550 >>> l = manager.list(range(10))
Benjamin Peterson2b97b712008-12-19 02:31:35 +00001551 >>> l._callmethod('__len__')
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001552 10
Benjamin Peterson2b97b712008-12-19 02:31:35 +00001553 >>> l._callmethod('__getslice__', (2, 7)) # equiv to `l[2:7]`
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001554 [2, 3, 4, 5, 6]
Benjamin Peterson2b97b712008-12-19 02:31:35 +00001555 >>> l._callmethod('__getitem__', (20,)) # equiv to `l[20]`
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001556 Traceback (most recent call last):
1557 ...
1558 IndexError: list index out of range
1559
Benjamin Peterson2b97b712008-12-19 02:31:35 +00001560 .. method:: _getvalue()
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001561
1562 Return a copy of the referent.
1563
1564 If the referent is unpicklable then this will raise an exception.
1565
1566 .. method:: __repr__
1567
1568 Return a representation of the proxy object.
1569
1570 .. method:: __str__
1571
1572 Return the representation of the referent.
1573
1574
1575Cleanup
1576>>>>>>>
1577
1578A proxy object uses a weakref callback so that when it gets garbage collected it
1579deregisters itself from the manager which owns its referent.
1580
1581A shared object gets deleted from the manager process when there are no longer
1582any proxies referring to it.
1583
1584
1585Process Pools
1586~~~~~~~~~~~~~
1587
1588.. module:: multiprocessing.pool
1589 :synopsis: Create pools of processes.
1590
1591One can create a pool of processes which will carry out tasks submitted to it
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001592with the :class:`Pool` class.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001593
Jesse Noller654ade32010-01-27 03:05:57 +00001594.. class:: multiprocessing.Pool([processes[, initializer[, initargs[, maxtasksperchild]]]])
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001595
1596 A process pool object which controls a pool of worker processes to which jobs
1597 can be submitted. It supports asynchronous results with timeouts and
1598 callbacks and has a parallel map implementation.
1599
1600 *processes* is the number of worker processes to use. If *processes* is
1601 ``None`` then the number returned by :func:`cpu_count` is used. If
1602 *initializer* is not ``None`` then each worker process will call
1603 ``initializer(*initargs)`` when it starts.
1604
Richard Oudkerk49032532013-07-02 12:31:50 +01001605 Note that the methods of the pool object should only be called by
1606 the process which created the pool.
1607
Georg Brandl92e69722010-10-17 06:21:30 +00001608 .. versionadded:: 2.7
1609 *maxtasksperchild* is the number of tasks a worker process can complete
1610 before it will exit and be replaced with a fresh worker process, to enable
1611 unused resources to be freed. The default *maxtasksperchild* is None, which
1612 means worker processes will live as long as the pool.
Jesse Noller654ade32010-01-27 03:05:57 +00001613
1614 .. note::
1615
Georg Brandl92e69722010-10-17 06:21:30 +00001616 Worker processes within a :class:`Pool` typically live for the complete
1617 duration of the Pool's work queue. A frequent pattern found in other
1618 systems (such as Apache, mod_wsgi, etc) to free resources held by
1619 workers is to allow a worker within a pool to complete only a set
1620 amount of work before being exiting, being cleaned up and a new
1621 process spawned to replace the old one. The *maxtasksperchild*
1622 argument to the :class:`Pool` exposes this ability to the end user.
Jesse Noller654ade32010-01-27 03:05:57 +00001623
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001624 .. method:: apply(func[, args[, kwds]])
1625
Eli Bendersky4b76f8a2011-12-31 07:05:12 +02001626 Equivalent of the :func:`apply` built-in function. It blocks until the
1627 result is ready, so :meth:`apply_async` is better suited for performing
1628 work in parallel. Additionally, *func* is only executed in one of the
1629 workers of the pool.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001630
1631 .. method:: apply_async(func[, args[, kwds[, callback]]])
1632
1633 A variant of the :meth:`apply` method which returns a result object.
1634
1635 If *callback* is specified then it should be a callable which accepts a
1636 single argument. When the result becomes ready *callback* is applied to
1637 it (unless the call failed). *callback* should complete immediately since
1638 otherwise the thread which handles the results will get blocked.
1639
1640 .. method:: map(func, iterable[, chunksize])
1641
Georg Brandld7d4fd72009-07-26 14:37:28 +00001642 A parallel equivalent of the :func:`map` built-in function (it supports only
Eli Bendersky4b76f8a2011-12-31 07:05:12 +02001643 one *iterable* argument though). It blocks until the result is ready.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001644
1645 This method chops the iterable into a number of chunks which it submits to
1646 the process pool as separate tasks. The (approximate) size of these
1647 chunks can be specified by setting *chunksize* to a positive integer.
1648
Senthil Kumaran0fc13ae2011-11-03 02:02:38 +08001649 .. method:: map_async(func, iterable[, chunksize[, callback]])
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001650
Georg Brandl9fa61bb2009-07-26 14:19:57 +00001651 A variant of the :meth:`.map` method which returns a result object.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001652
1653 If *callback* is specified then it should be a callable which accepts a
1654 single argument. When the result becomes ready *callback* is applied to
1655 it (unless the call failed). *callback* should complete immediately since
1656 otherwise the thread which handles the results will get blocked.
1657
1658 .. method:: imap(func, iterable[, chunksize])
1659
1660 An equivalent of :func:`itertools.imap`.
1661
1662 The *chunksize* argument is the same as the one used by the :meth:`.map`
1663 method. For very long iterables using a large value for *chunksize* can
Ezio Melotti1e87da12011-10-19 10:39:35 +03001664 make the job complete **much** faster than using the default value of
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001665 ``1``.
1666
Georg Brandl9fa61bb2009-07-26 14:19:57 +00001667 Also if *chunksize* is ``1`` then the :meth:`!next` method of the iterator
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001668 returned by the :meth:`imap` method has an optional *timeout* parameter:
1669 ``next(timeout)`` will raise :exc:`multiprocessing.TimeoutError` if the
1670 result cannot be returned within *timeout* seconds.
1671
1672 .. method:: imap_unordered(func, iterable[, chunksize])
1673
1674 The same as :meth:`imap` except that the ordering of the results from the
1675 returned iterator should be considered arbitrary. (Only when there is
1676 only one worker process is the order guaranteed to be "correct".)
1677
1678 .. method:: close()
1679
1680 Prevents any more tasks from being submitted to the pool. Once all the
1681 tasks have been completed the worker processes will exit.
1682
1683 .. method:: terminate()
1684
1685 Stops the worker processes immediately without completing outstanding
1686 work. When the pool object is garbage collected :meth:`terminate` will be
1687 called immediately.
1688
1689 .. method:: join()
1690
1691 Wait for the worker processes to exit. One must call :meth:`close` or
1692 :meth:`terminate` before using :meth:`join`.
1693
1694
1695.. class:: AsyncResult
1696
1697 The class of the result returned by :meth:`Pool.apply_async` and
1698 :meth:`Pool.map_async`.
1699
Jesse Nollera280fd72008-11-28 18:22:54 +00001700 .. method:: get([timeout])
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001701
1702 Return the result when it arrives. If *timeout* is not ``None`` and the
1703 result does not arrive within *timeout* seconds then
1704 :exc:`multiprocessing.TimeoutError` is raised. If the remote call raised
1705 an exception then that exception will be reraised by :meth:`get`.
1706
1707 .. method:: wait([timeout])
1708
1709 Wait until the result is available or until *timeout* seconds pass.
1710
1711 .. method:: ready()
1712
1713 Return whether the call has completed.
1714
1715 .. method:: successful()
1716
1717 Return whether the call completed without raising an exception. Will
1718 raise :exc:`AssertionError` if the result is not ready.
1719
1720The following example demonstrates the use of a pool::
1721
1722 from multiprocessing import Pool
1723
1724 def f(x):
1725 return x*x
1726
1727 if __name__ == '__main__':
1728 pool = Pool(processes=4) # start 4 worker processes
1729
Jesse Nollera280fd72008-11-28 18:22:54 +00001730 result = pool.apply_async(f, (10,)) # evaluate "f(10)" asynchronously
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001731 print result.get(timeout=1) # prints "100" unless your computer is *very* slow
1732
1733 print pool.map(f, range(10)) # prints "[0, 1, 4,..., 81]"
1734
1735 it = pool.imap(f, range(10))
1736 print it.next() # prints "0"
1737 print it.next() # prints "1"
1738 print it.next(timeout=1) # prints "4" unless your computer is *very* slow
1739
1740 import time
Jesse Nollera280fd72008-11-28 18:22:54 +00001741 result = pool.apply_async(time.sleep, (10,))
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001742 print result.get(timeout=1) # raises TimeoutError
1743
1744
1745.. _multiprocessing-listeners-clients:
1746
1747Listeners and Clients
1748~~~~~~~~~~~~~~~~~~~~~
1749
1750.. module:: multiprocessing.connection
1751 :synopsis: API for dealing with sockets.
1752
1753Usually message passing between processes is done using queues or by using
1754:class:`Connection` objects returned by :func:`Pipe`.
1755
1756However, the :mod:`multiprocessing.connection` module allows some extra
1757flexibility. It basically gives a high level message oriented API for dealing
1758with sockets or Windows named pipes, and also has support for *digest
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001759authentication* using the :mod:`hmac` module.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001760
1761
1762.. function:: deliver_challenge(connection, authkey)
1763
1764 Send a randomly generated message to the other end of the connection and wait
1765 for a reply.
1766
1767 If the reply matches the digest of the message using *authkey* as the key
1768 then a welcome message is sent to the other end of the connection. Otherwise
1769 :exc:`AuthenticationError` is raised.
1770
Ezio Melotti3218f652013-04-10 17:59:20 +03001771.. function:: answer_challenge(connection, authkey)
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001772
1773 Receive a message, calculate the digest of the message using *authkey* as the
1774 key, and then send the digest back.
1775
1776 If a welcome message is not received, then :exc:`AuthenticationError` is
1777 raised.
1778
1779.. function:: Client(address[, family[, authenticate[, authkey]]])
1780
1781 Attempt to set up a connection to the listener which is using address
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001782 *address*, returning a :class:`~multiprocessing.Connection`.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001783
1784 The type of the connection is determined by *family* argument, but this can
1785 generally be omitted since it can usually be inferred from the format of
1786 *address*. (See :ref:`multiprocessing-address-formats`)
1787
Jesse Noller34116922009-06-29 18:24:26 +00001788 If *authenticate* is ``True`` or *authkey* is a string then digest
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001789 authentication is used. The key used for authentication will be either
Benjamin Peterson73641d72008-08-20 14:07:59 +00001790 *authkey* or ``current_process().authkey)`` if *authkey* is ``None``.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001791 If authentication fails then :exc:`AuthenticationError` is raised. See
1792 :ref:`multiprocessing-auth-keys`.
1793
1794.. class:: Listener([address[, family[, backlog[, authenticate[, authkey]]]]])
1795
1796 A wrapper for a bound socket or Windows named pipe which is 'listening' for
1797 connections.
1798
1799 *address* is the address to be used by the bound socket or named pipe of the
1800 listener object.
1801
Jesse Nollerb12e79d2009-04-01 16:42:19 +00001802 .. note::
1803
1804 If an address of '0.0.0.0' is used, the address will not be a connectable
1805 end point on Windows. If you require a connectable end-point,
1806 you should use '127.0.0.1'.
1807
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001808 *family* is the type of socket (or named pipe) to use. This can be one of
1809 the strings ``'AF_INET'`` (for a TCP socket), ``'AF_UNIX'`` (for a Unix
1810 domain socket) or ``'AF_PIPE'`` (for a Windows named pipe). Of these only
1811 the first is guaranteed to be available. If *family* is ``None`` then the
1812 family is inferred from the format of *address*. If *address* is also
1813 ``None`` then a default is chosen. This default is the family which is
1814 assumed to be the fastest available. See
1815 :ref:`multiprocessing-address-formats`. Note that if *family* is
1816 ``'AF_UNIX'`` and address is ``None`` then the socket will be created in a
1817 private temporary directory created using :func:`tempfile.mkstemp`.
1818
1819 If the listener object uses a socket then *backlog* (1 by default) is passed
1820 to the :meth:`listen` method of the socket once it has been bound.
1821
1822 If *authenticate* is ``True`` (``False`` by default) or *authkey* is not
1823 ``None`` then digest authentication is used.
1824
1825 If *authkey* is a string then it will be used as the authentication key;
1826 otherwise it must be *None*.
1827
1828 If *authkey* is ``None`` and *authenticate* is ``True`` then
Benjamin Peterson73641d72008-08-20 14:07:59 +00001829 ``current_process().authkey`` is used as the authentication key. If
Jesse Noller34116922009-06-29 18:24:26 +00001830 *authkey* is ``None`` and *authenticate* is ``False`` then no
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001831 authentication is done. If authentication fails then
1832 :exc:`AuthenticationError` is raised. See :ref:`multiprocessing-auth-keys`.
1833
1834 .. method:: accept()
1835
1836 Accept a connection on the bound socket or named pipe of the listener
1837 object and return a :class:`Connection` object. If authentication is
1838 attempted and fails, then :exc:`AuthenticationError` is raised.
1839
1840 .. method:: close()
1841
1842 Close the bound socket or named pipe of the listener object. This is
1843 called automatically when the listener is garbage collected. However it
1844 is advisable to call it explicitly.
1845
1846 Listener objects have the following read-only properties:
1847
1848 .. attribute:: address
1849
1850 The address which is being used by the Listener object.
1851
1852 .. attribute:: last_accepted
1853
1854 The address from which the last accepted connection came. If this is
1855 unavailable then it is ``None``.
1856
1857
1858The module defines two exceptions:
1859
1860.. exception:: AuthenticationError
1861
1862 Exception raised when there is an authentication error.
1863
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001864
1865**Examples**
1866
1867The following server code creates a listener which uses ``'secret password'`` as
1868an authentication key. It then waits for a connection and sends some data to
1869the client::
1870
1871 from multiprocessing.connection import Listener
1872 from array import array
1873
1874 address = ('localhost', 6000) # family is deduced to be 'AF_INET'
1875 listener = Listener(address, authkey='secret password')
1876
1877 conn = listener.accept()
1878 print 'connection accepted from', listener.last_accepted
1879
1880 conn.send([2.25, None, 'junk', float])
1881
1882 conn.send_bytes('hello')
1883
1884 conn.send_bytes(array('i', [42, 1729]))
1885
1886 conn.close()
1887 listener.close()
1888
1889The following code connects to the server and receives some data from the
1890server::
1891
1892 from multiprocessing.connection import Client
1893 from array import array
1894
1895 address = ('localhost', 6000)
1896 conn = Client(address, authkey='secret password')
1897
1898 print conn.recv() # => [2.25, None, 'junk', float]
1899
1900 print conn.recv_bytes() # => 'hello'
1901
1902 arr = array('i', [0, 0, 0, 0, 0])
1903 print conn.recv_bytes_into(arr) # => 8
1904 print arr # => array('i', [42, 1729, 0, 0, 0])
1905
1906 conn.close()
1907
1908
1909.. _multiprocessing-address-formats:
1910
1911Address Formats
1912>>>>>>>>>>>>>>>
1913
Andrew M. Kuchlingbe504f12008-06-19 19:48:42 +00001914* An ``'AF_INET'`` address is a tuple of the form ``(hostname, port)`` where
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001915 *hostname* is a string and *port* is an integer.
1916
Andrew M. Kuchlingbe504f12008-06-19 19:48:42 +00001917* An ``'AF_UNIX'`` address is a string representing a filename on the
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001918 filesystem.
1919
1920* An ``'AF_PIPE'`` address is a string of the form
Georg Brandl6b28f392008-12-27 19:06:04 +00001921 :samp:`r'\\\\.\\pipe\\{PipeName}'`. To use :func:`Client` to connect to a named
Georg Brandlfc29f272009-01-02 20:25:14 +00001922 pipe on a remote computer called *ServerName* one should use an address of the
Georg Brandldd7e3132009-01-04 10:24:09 +00001923 form :samp:`r'\\\\{ServerName}\\pipe\\{PipeName}'` instead.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001924
1925Note that any string beginning with two backslashes is assumed by default to be
1926an ``'AF_PIPE'`` address rather than an ``'AF_UNIX'`` address.
1927
1928
1929.. _multiprocessing-auth-keys:
1930
1931Authentication keys
1932~~~~~~~~~~~~~~~~~~~
1933
1934When one uses :meth:`Connection.recv`, the data received is automatically
1935unpickled. Unfortunately unpickling data from an untrusted source is a security
1936risk. Therefore :class:`Listener` and :func:`Client` use the :mod:`hmac` module
1937to provide digest authentication.
1938
1939An authentication key is a string which can be thought of as a password: once a
1940connection is established both ends will demand proof that the other knows the
1941authentication key. (Demonstrating that both ends are using the same key does
1942**not** involve sending the key over the connection.)
1943
1944If authentication is requested but do authentication key is specified then the
Benjamin Peterson73641d72008-08-20 14:07:59 +00001945return value of ``current_process().authkey`` is used (see
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001946:class:`~multiprocessing.Process`). This value will automatically inherited by
1947any :class:`~multiprocessing.Process` object that the current process creates.
1948This means that (by default) all processes of a multi-process program will share
1949a single authentication key which can be used when setting up connections
Andrew M. Kuchlinga178a692009-04-03 21:45:29 +00001950between themselves.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001951
1952Suitable authentication keys can also be generated by using :func:`os.urandom`.
1953
1954
1955Logging
1956~~~~~~~
1957
1958Some support for logging is available. Note, however, that the :mod:`logging`
1959package does not use process shared locks so it is possible (depending on the
1960handler type) for messages from different processes to get mixed up.
1961
1962.. currentmodule:: multiprocessing
1963.. function:: get_logger()
1964
1965 Returns the logger used by :mod:`multiprocessing`. If necessary, a new one
1966 will be created.
1967
Jesse Nollerb5a4b0a2009-01-25 03:36:13 +00001968 When first created the logger has level :data:`logging.NOTSET` and no
1969 default handler. Messages sent to this logger will not by default propagate
1970 to the root logger.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001971
1972 Note that on Windows child processes will only inherit the level of the
1973 parent process's logger -- any other customization of the logger will not be
1974 inherited.
1975
Jesse Nollerb5a4b0a2009-01-25 03:36:13 +00001976.. currentmodule:: multiprocessing
1977.. function:: log_to_stderr()
1978
1979 This function performs a call to :func:`get_logger` but in addition to
1980 returning the logger created by get_logger, it adds a handler which sends
1981 output to :data:`sys.stderr` using format
1982 ``'[%(levelname)s/%(processName)s] %(message)s'``.
1983
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001984Below is an example session with logging turned on::
1985
Georg Brandl19cc9442008-10-16 21:36:39 +00001986 >>> import multiprocessing, logging
Jesse Nollerb5a4b0a2009-01-25 03:36:13 +00001987 >>> logger = multiprocessing.log_to_stderr()
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001988 >>> logger.setLevel(logging.INFO)
1989 >>> logger.warning('doomed')
1990 [WARNING/MainProcess] doomed
Georg Brandl19cc9442008-10-16 21:36:39 +00001991 >>> m = multiprocessing.Manager()
R. David Murray636b23a2009-04-28 16:08:18 +00001992 [INFO/SyncManager-...] child process calling self.run()
1993 [INFO/SyncManager-...] created temp directory /.../pymp-...
1994 [INFO/SyncManager-...] manager serving at '/.../listener-...'
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001995 >>> del m
1996 [INFO/MainProcess] sending shutdown message to manager
R. David Murray636b23a2009-04-28 16:08:18 +00001997 [INFO/SyncManager-...] manager exiting with exitcode 0
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001998
Jesse Nollerb5a4b0a2009-01-25 03:36:13 +00001999In addition to having these two logging functions, the multiprocessing also
2000exposes two additional logging level attributes. These are :const:`SUBWARNING`
2001and :const:`SUBDEBUG`. The table below illustrates where theses fit in the
2002normal level hierarchy.
2003
2004+----------------+----------------+
2005| Level | Numeric value |
2006+================+================+
2007| ``SUBWARNING`` | 25 |
2008+----------------+----------------+
2009| ``SUBDEBUG`` | 5 |
2010+----------------+----------------+
2011
2012For a full table of logging levels, see the :mod:`logging` module.
2013
2014These additional logging levels are used primarily for certain debug messages
2015within the multiprocessing module. Below is the same example as above, except
2016with :const:`SUBDEBUG` enabled::
2017
2018 >>> import multiprocessing, logging
2019 >>> logger = multiprocessing.log_to_stderr()
2020 >>> logger.setLevel(multiprocessing.SUBDEBUG)
2021 >>> logger.warning('doomed')
2022 [WARNING/MainProcess] doomed
2023 >>> m = multiprocessing.Manager()
R. David Murray636b23a2009-04-28 16:08:18 +00002024 [INFO/SyncManager-...] child process calling self.run()
2025 [INFO/SyncManager-...] created temp directory /.../pymp-...
2026 [INFO/SyncManager-...] manager serving at '/.../pymp-djGBXN/listener-...'
Jesse Nollerb5a4b0a2009-01-25 03:36:13 +00002027 >>> del m
2028 [SUBDEBUG/MainProcess] finalizer calling ...
2029 [INFO/MainProcess] sending shutdown message to manager
R. David Murray636b23a2009-04-28 16:08:18 +00002030 [DEBUG/SyncManager-...] manager received shutdown message
2031 [SUBDEBUG/SyncManager-...] calling <Finalize object, callback=unlink, ...
2032 [SUBDEBUG/SyncManager-...] finalizer calling <built-in function unlink> ...
2033 [SUBDEBUG/SyncManager-...] calling <Finalize object, dead>
2034 [SUBDEBUG/SyncManager-...] finalizer calling <function rmtree at 0x5aa730> ...
2035 [INFO/SyncManager-...] manager exiting with exitcode 0
Benjamin Peterson190d56e2008-06-11 02:40:25 +00002036
2037The :mod:`multiprocessing.dummy` module
2038~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2039
2040.. module:: multiprocessing.dummy
2041 :synopsis: Dumb wrapper around threading.
2042
2043:mod:`multiprocessing.dummy` replicates the API of :mod:`multiprocessing` but is
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00002044no more than a wrapper around the :mod:`threading` module.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00002045
2046
2047.. _multiprocessing-programming:
2048
2049Programming guidelines
2050----------------------
2051
2052There are certain guidelines and idioms which should be adhered to when using
2053:mod:`multiprocessing`.
2054
2055
2056All platforms
2057~~~~~~~~~~~~~
2058
2059Avoid shared state
2060
2061 As far as possible one should try to avoid shifting large amounts of data
2062 between processes.
2063
2064 It is probably best to stick to using queues or pipes for communication
2065 between processes rather than using the lower level synchronization
2066 primitives from the :mod:`threading` module.
2067
2068Picklability
2069
2070 Ensure that the arguments to the methods of proxies are picklable.
2071
2072Thread safety of proxies
2073
2074 Do not use a proxy object from more than one thread unless you protect it
2075 with a lock.
2076
2077 (There is never a problem with different processes using the *same* proxy.)
2078
2079Joining zombie processes
2080
2081 On Unix when a process finishes but has not been joined it becomes a zombie.
2082 There should never be very many because each time a new process starts (or
2083 :func:`active_children` is called) all completed processes which have not
2084 yet been joined will be joined. Also calling a finished process's
2085 :meth:`Process.is_alive` will join the process. Even so it is probably good
2086 practice to explicitly join all the processes that you start.
2087
2088Better to inherit than pickle/unpickle
2089
Andrew M. Kuchlingbe504f12008-06-19 19:48:42 +00002090 On Windows many types from :mod:`multiprocessing` need to be picklable so
Benjamin Peterson190d56e2008-06-11 02:40:25 +00002091 that child processes can use them. However, one should generally avoid
2092 sending shared objects to other processes using pipes or queues. Instead
Eli Bendersky4b76f8a2011-12-31 07:05:12 +02002093 you should arrange the program so that a process which needs access to a
Benjamin Peterson190d56e2008-06-11 02:40:25 +00002094 shared resource created elsewhere can inherit it from an ancestor process.
2095
2096Avoid terminating processes
2097
2098 Using the :meth:`Process.terminate` method to stop a process is liable to
2099 cause any shared resources (such as locks, semaphores, pipes and queues)
2100 currently being used by the process to become broken or unavailable to other
2101 processes.
2102
2103 Therefore it is probably best to only consider using
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00002104 :meth:`Process.terminate` on processes which never use any shared resources.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00002105
2106Joining processes that use queues
2107
2108 Bear in mind that a process that has put items in a queue will wait before
2109 terminating until all the buffered items are fed by the "feeder" thread to
2110 the underlying pipe. (The child process can call the
Sandro Tosi8b48c662012-02-25 19:35:16 +01002111 :meth:`~multiprocessing.Queue.cancel_join_thread` method of the queue to avoid this behaviour.)
Benjamin Peterson190d56e2008-06-11 02:40:25 +00002112
2113 This means that whenever you use a queue you need to make sure that all
2114 items which have been put on the queue will eventually be removed before the
2115 process is joined. Otherwise you cannot be sure that processes which have
2116 put items on the queue will terminate. Remember also that non-daemonic
2117 processes will be automatically be joined.
2118
2119 An example which will deadlock is the following::
2120
2121 from multiprocessing import Process, Queue
2122
2123 def f(q):
2124 q.put('X' * 1000000)
2125
2126 if __name__ == '__main__':
2127 queue = Queue()
2128 p = Process(target=f, args=(queue,))
2129 p.start()
2130 p.join() # this deadlocks
2131 obj = queue.get()
2132
2133 A fix here would be to swap the last two lines round (or simply remove the
2134 ``p.join()`` line).
2135
Andrew M. Kuchlingbe504f12008-06-19 19:48:42 +00002136Explicitly pass resources to child processes
Benjamin Peterson190d56e2008-06-11 02:40:25 +00002137
2138 On Unix a child process can make use of a shared resource created in a
2139 parent process using a global resource. However, it is better to pass the
2140 object as an argument to the constructor for the child process.
2141
2142 Apart from making the code (potentially) compatible with Windows this also
2143 ensures that as long as the child process is still alive the object will not
2144 be garbage collected in the parent process. This might be important if some
2145 resource is freed when the object is garbage collected in the parent
2146 process.
2147
2148 So for instance ::
2149
2150 from multiprocessing import Process, Lock
2151
2152 def f():
2153 ... do something using "lock" ...
2154
2155 if __name__ == '__main__':
2156 lock = Lock()
2157 for i in range(10):
2158 Process(target=f).start()
2159
2160 should be rewritten as ::
2161
2162 from multiprocessing import Process, Lock
2163
2164 def f(l):
2165 ... do something using "l" ...
2166
2167 if __name__ == '__main__':
2168 lock = Lock()
2169 for i in range(10):
2170 Process(target=f, args=(lock,)).start()
2171
Eli Bendersky4b76f8a2011-12-31 07:05:12 +02002172Beware of replacing :data:`sys.stdin` with a "file like object"
Jesse Noller1b90efb2009-06-30 17:11:52 +00002173
2174 :mod:`multiprocessing` originally unconditionally called::
2175
2176 os.close(sys.stdin.fileno())
2177
R. David Murray321afa82009-07-01 02:49:10 +00002178 in the :meth:`multiprocessing.Process._bootstrap` method --- this resulted
Jesse Noller1b90efb2009-06-30 17:11:52 +00002179 in issues with processes-in-processes. This has been changed to::
2180
2181 sys.stdin.close()
2182 sys.stdin = open(os.devnull)
2183
2184 Which solves the fundamental issue of processes colliding with each other
2185 resulting in a bad file descriptor error, but introduces a potential danger
2186 to applications which replace :func:`sys.stdin` with a "file-like object"
R. David Murray321afa82009-07-01 02:49:10 +00002187 with output buffering. This danger is that if multiple processes call
Jesse Noller1b90efb2009-06-30 17:11:52 +00002188 :func:`close()` on this file-like object, it could result in the same
2189 data being flushed to the object multiple times, resulting in corruption.
2190
2191 If you write a file-like object and implement your own caching, you can
2192 make it fork-safe by storing the pid whenever you append to the cache,
2193 and discarding the cache when the pid changes. For example::
2194
2195 @property
2196 def cache(self):
2197 pid = os.getpid()
2198 if pid != self._pid:
2199 self._pid = pid
2200 self._cache = []
2201 return self._cache
2202
2203 For more information, see :issue:`5155`, :issue:`5313` and :issue:`5331`
Benjamin Peterson190d56e2008-06-11 02:40:25 +00002204
2205Windows
2206~~~~~~~
2207
2208Since Windows lacks :func:`os.fork` it has a few extra restrictions:
2209
2210More picklability
2211
2212 Ensure that all arguments to :meth:`Process.__init__` are picklable. This
2213 means, in particular, that bound or unbound methods cannot be used directly
2214 as the ``target`` argument on Windows --- just define a function and use
2215 that instead.
2216
2217 Also, if you subclass :class:`Process` then make sure that instances will be
2218 picklable when the :meth:`Process.start` method is called.
2219
2220Global variables
2221
2222 Bear in mind that if code run in a child process tries to access a global
2223 variable, then the value it sees (if any) may not be the same as the value
2224 in the parent process at the time that :meth:`Process.start` was called.
2225
2226 However, global variables which are just module level constants cause no
2227 problems.
2228
2229Safe importing of main module
2230
2231 Make sure that the main module can be safely imported by a new Python
2232 interpreter without causing unintended side effects (such a starting a new
2233 process).
2234
2235 For example, under Windows running the following module would fail with a
2236 :exc:`RuntimeError`::
2237
2238 from multiprocessing import Process
2239
2240 def foo():
2241 print 'hello'
2242
2243 p = Process(target=foo)
2244 p.start()
2245
2246 Instead one should protect the "entry point" of the program by using ``if
2247 __name__ == '__main__':`` as follows::
2248
2249 from multiprocessing import Process, freeze_support
2250
2251 def foo():
2252 print 'hello'
2253
2254 if __name__ == '__main__':
2255 freeze_support()
2256 p = Process(target=foo)
2257 p.start()
2258
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00002259 (The ``freeze_support()`` line can be omitted if the program will be run
Benjamin Peterson190d56e2008-06-11 02:40:25 +00002260 normally instead of frozen.)
2261
2262 This allows the newly spawned Python interpreter to safely import the module
2263 and then run the module's ``foo()`` function.
2264
2265 Similar restrictions apply if a pool or manager is created in the main
2266 module.
2267
2268
2269.. _multiprocessing-examples:
2270
2271Examples
2272--------
2273
2274Demonstration of how to create and use customized managers and proxies:
2275
2276.. literalinclude:: ../includes/mp_newtype.py
2277
2278
2279Using :class:`Pool`:
2280
2281.. literalinclude:: ../includes/mp_pool.py
2282
2283
2284Synchronization types like locks, conditions and queues:
2285
2286.. literalinclude:: ../includes/mp_synchronize.py
2287
2288
Georg Brandl21946af2010-10-06 09:28:45 +00002289An example showing how to use queues to feed tasks to a collection of worker
Eli Bendersky4b76f8a2011-12-31 07:05:12 +02002290processes and collect the results:
Benjamin Peterson190d56e2008-06-11 02:40:25 +00002291
2292.. literalinclude:: ../includes/mp_workers.py
2293
2294
2295An example of how a pool of worker processes can each run a
2296:class:`SimpleHTTPServer.HttpServer` instance while sharing a single listening
2297socket.
2298
2299.. literalinclude:: ../includes/mp_webserver.py
2300
2301
2302Some simple benchmarks comparing :mod:`multiprocessing` with :mod:`threading`:
2303
2304.. literalinclude:: ../includes/mp_benchmarks.py
2305