blob: 8904cc36474cb5b382c543c9b36e18eaa3dbac1d [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
290
291Reference
292---------
293
294The :mod:`multiprocessing` package mostly replicates the API of the
295:mod:`threading` module.
296
297
298:class:`Process` and exceptions
299~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
300
Ezio Melottied3f5902012-09-14 06:48:32 +0300301.. class:: Process(group=None, target=None, name=None, args=(), kwargs={})
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000302
303 Process objects represent activity that is run in a separate process. The
304 :class:`Process` class has equivalents of all the methods of
305 :class:`threading.Thread`.
306
307 The constructor should always be called with keyword arguments. *group*
Andrew M. Kuchlingbe504f12008-06-19 19:48:42 +0000308 should always be ``None``; it exists solely for compatibility with
Benjamin Peterson73641d72008-08-20 14:07:59 +0000309 :class:`threading.Thread`. *target* is the callable object to be invoked by
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000310 the :meth:`run()` method. It defaults to ``None``, meaning nothing is
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000311 called. *name* is the process name. By default, a unique name is constructed
312 of the form 'Process-N\ :sub:`1`:N\ :sub:`2`:...:N\ :sub:`k`' where N\
313 :sub:`1`,N\ :sub:`2`,...,N\ :sub:`k` is a sequence of integers whose length
314 is determined by the *generation* of the process. *args* is the argument
315 tuple for the target invocation. *kwargs* is a dictionary of keyword
316 arguments for the target invocation. By default, no arguments are passed to
317 *target*.
318
319 If a subclass overrides the constructor, it must make sure it invokes the
320 base class constructor (:meth:`Process.__init__`) before doing anything else
321 to the process.
322
323 .. method:: run()
324
325 Method representing the process's activity.
326
327 You may override this method in a subclass. The standard :meth:`run`
328 method invokes the callable object passed to the object's constructor as
329 the target argument, if any, with sequential and keyword arguments taken
330 from the *args* and *kwargs* arguments, respectively.
331
332 .. method:: start()
333
334 Start the process's activity.
335
336 This must be called at most once per process object. It arranges for the
337 object's :meth:`run` method to be invoked in a separate process.
338
339 .. method:: join([timeout])
340
341 Block the calling thread until the process whose :meth:`join` method is
342 called terminates or until the optional timeout occurs.
343
344 If *timeout* is ``None`` then there is no timeout.
345
346 A process can be joined many times.
347
348 A process cannot join itself because this would cause a deadlock. It is
349 an error to attempt to join a process before it has been started.
350
Benjamin Peterson73641d72008-08-20 14:07:59 +0000351 .. attribute:: name
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000352
Benjamin Peterson73641d72008-08-20 14:07:59 +0000353 The process's name.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000354
355 The name is a string used for identification purposes only. It has no
356 semantics. Multiple processes may be given the same name. The initial
357 name is set by the constructor.
358
Jesse Nollera280fd72008-11-28 18:22:54 +0000359 .. method:: is_alive
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000360
361 Return whether the process is alive.
362
363 Roughly, a process object is alive from the moment the :meth:`start`
364 method returns until the child process terminates.
365
Benjamin Peterson73641d72008-08-20 14:07:59 +0000366 .. attribute:: daemon
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000367
Georg Brandl3bcb0ce2008-12-30 10:15:49 +0000368 The process's daemon flag, a Boolean value. This must be set before
Benjamin Peterson73641d72008-08-20 14:07:59 +0000369 :meth:`start` is called.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000370
371 The initial value is inherited from the creating process.
372
373 When a process exits, it attempts to terminate all of its daemonic child
374 processes.
375
376 Note that a daemonic process is not allowed to create child processes.
377 Otherwise a daemonic process would leave its children orphaned if it gets
Jesse Nollerd4792cd2009-06-29 18:20:34 +0000378 terminated when its parent process exits. Additionally, these are **not**
379 Unix daemons or services, they are normal processes that will be
Georg Brandl09302282010-10-06 09:32:48 +0000380 terminated (and not joined) if non-daemonic processes have exited.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000381
Brett Cannon971f1022008-08-24 23:15:19 +0000382 In addition to the :class:`Threading.Thread` API, :class:`Process` objects
383 also support the following attributes and methods:
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000384
Benjamin Peterson73641d72008-08-20 14:07:59 +0000385 .. attribute:: pid
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000386
387 Return the process ID. Before the process is spawned, this will be
388 ``None``.
389
Benjamin Peterson73641d72008-08-20 14:07:59 +0000390 .. attribute:: exitcode
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000391
Benjamin Peterson73641d72008-08-20 14:07:59 +0000392 The child's exit code. This will be ``None`` if the process has not yet
393 terminated. A negative value *-N* indicates that the child was terminated
394 by signal *N*.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000395
Benjamin Peterson73641d72008-08-20 14:07:59 +0000396 .. attribute:: authkey
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000397
Benjamin Peterson73641d72008-08-20 14:07:59 +0000398 The process's authentication key (a byte string).
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000399
400 When :mod:`multiprocessing` is initialized the main process is assigned a
401 random string using :func:`os.random`.
402
403 When a :class:`Process` object is created, it will inherit the
Benjamin Peterson73641d72008-08-20 14:07:59 +0000404 authentication key of its parent process, although this may be changed by
405 setting :attr:`authkey` to another byte string.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000406
407 See :ref:`multiprocessing-auth-keys`.
408
Andrew M. Kuchlingbe504f12008-06-19 19:48:42 +0000409 .. method:: terminate()
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000410
Andrew M. Kuchlingbe504f12008-06-19 19:48:42 +0000411 Terminate the process. On Unix this is done using the ``SIGTERM`` signal;
Sandro Tosi98ed08f2012-01-14 16:42:02 +0100412 on Windows :c:func:`TerminateProcess` is used. Note that exit handlers and
Andrew M. Kuchlingbe504f12008-06-19 19:48:42 +0000413 finally clauses, etc., will not be executed.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000414
415 Note that descendant processes of the process will *not* be terminated --
416 they will simply become orphaned.
417
418 .. warning::
419
420 If this method is used when the associated process is using a pipe or
421 queue then the pipe or queue is liable to become corrupted and may
422 become unusable by other process. Similarly, if the process has
423 acquired a lock or semaphore etc. then terminating it is liable to
424 cause other processes to deadlock.
425
426 Note that the :meth:`start`, :meth:`join`, :meth:`is_alive` and
Benjamin Peterson73641d72008-08-20 14:07:59 +0000427 :attr:`exit_code` methods should only be called by the process that created
428 the process object.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000429
R. David Murray636b23a2009-04-28 16:08:18 +0000430 Example usage of some of the methods of :class:`Process`:
431
432 .. doctest::
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000433
Georg Brandl19cc9442008-10-16 21:36:39 +0000434 >>> import multiprocessing, time, signal
435 >>> p = multiprocessing.Process(target=time.sleep, args=(1000,))
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000436 >>> print p, p.is_alive()
437 <Process(Process-1, initial)> False
438 >>> p.start()
439 >>> print p, p.is_alive()
440 <Process(Process-1, started)> True
441 >>> p.terminate()
R. David Murray636b23a2009-04-28 16:08:18 +0000442 >>> time.sleep(0.1)
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000443 >>> print p, p.is_alive()
444 <Process(Process-1, stopped[SIGTERM])> False
Benjamin Peterson73641d72008-08-20 14:07:59 +0000445 >>> p.exitcode == -signal.SIGTERM
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000446 True
447
448
449.. exception:: BufferTooShort
450
451 Exception raised by :meth:`Connection.recv_bytes_into()` when the supplied
452 buffer object is too small for the message read.
453
454 If ``e`` is an instance of :exc:`BufferTooShort` then ``e.args[0]`` will give
455 the message as a byte string.
456
457
458Pipes and Queues
459~~~~~~~~~~~~~~~~
460
461When using multiple processes, one generally uses message passing for
462communication between processes and avoids having to use any synchronization
463primitives like locks.
464
465For passing messages one can use :func:`Pipe` (for a connection between two
466processes) or a queue (which allows multiple producers and consumers).
467
Sandro Tosi8b48c662012-02-25 19:35:16 +0100468The :class:`~multiprocessing.Queue`, :class:`multiprocessing.queues.SimpleQueue` and :class:`JoinableQueue` types are multi-producer,
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000469multi-consumer FIFO queues modelled on the :class:`Queue.Queue` class in the
Sandro Tosi8b48c662012-02-25 19:35:16 +0100470standard library. They differ in that :class:`~multiprocessing.Queue` lacks the
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000471:meth:`~Queue.Queue.task_done` and :meth:`~Queue.Queue.join` methods introduced
472into Python 2.5's :class:`Queue.Queue` class.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000473
474If you use :class:`JoinableQueue` then you **must** call
475:meth:`JoinableQueue.task_done` for each task removed from the queue or else the
Eli Bendersky4b76f8a2011-12-31 07:05:12 +0200476semaphore used to count the number of unfinished tasks may eventually overflow,
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000477raising an exception.
478
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000479Note that one can also create a shared queue by using a manager object -- see
480:ref:`multiprocessing-managers`.
481
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000482.. note::
483
484 :mod:`multiprocessing` uses the usual :exc:`Queue.Empty` and
485 :exc:`Queue.Full` exceptions to signal a timeout. They are not available in
486 the :mod:`multiprocessing` namespace so you need to import them from
487 :mod:`Queue`.
488
Richard Oudkerk56e968c2013-06-24 14:45:24 +0100489.. note::
490
491 When an object is put on a queue, the object is pickled and a
492 background thread later flushes the pickled data to an underlying
493 pipe. This has some consequences which are a little surprising,
494 but should not cause any pratical difficulties -- you can always
495 use a managed queue if they really bother you.
496
497 (1) After putting an object on an empty queue there may be an
498 infinitessimal delay before the queue's :meth:`~Queue.empty`
499 method returns :const:`False` and :meth:`~Queue.get_nowait` can
500 return without raising :exc:`Queue.Empty`.
501
502 (2) If multiple processes are enqueuing objects, it is possible for
503 the objects to be received at the other end out-of-order.
504 However, objects enqueued by the same process will always be in
505 the expected order with respect to each other.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000506
507.. warning::
508
509 If a process is killed using :meth:`Process.terminate` or :func:`os.kill`
Sandro Tosi8b48c662012-02-25 19:35:16 +0100510 while it is trying to use a :class:`~multiprocessing.Queue`, then the data in the queue is
Eli Bendersky4b76f8a2011-12-31 07:05:12 +0200511 likely to become corrupted. This may cause any other process to get an
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000512 exception when it tries to use the queue later on.
513
514.. warning::
515
516 As mentioned above, if a child process has put items on a queue (and it has
517 not used :meth:`JoinableQueue.cancel_join_thread`), then that process will
518 not terminate until all buffered items have been flushed to the pipe.
519
520 This means that if you try joining that process you may get a deadlock unless
521 you are sure that all items which have been put on the queue have been
522 consumed. Similarly, if the child process is non-daemonic then the parent
Andrew M. Kuchlingded01d12008-07-14 00:35:32 +0000523 process may hang on exit when it tries to join all its non-daemonic children.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000524
525 Note that a queue created using a manager does not have this issue. See
526 :ref:`multiprocessing-programming`.
527
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000528For an example of the usage of queues for interprocess communication see
529:ref:`multiprocessing-examples`.
530
531
532.. function:: Pipe([duplex])
533
534 Returns a pair ``(conn1, conn2)`` of :class:`Connection` objects representing
535 the ends of a pipe.
536
537 If *duplex* is ``True`` (the default) then the pipe is bidirectional. If
538 *duplex* is ``False`` then the pipe is unidirectional: ``conn1`` can only be
539 used for receiving messages and ``conn2`` can only be used for sending
540 messages.
541
542
543.. class:: Queue([maxsize])
544
545 Returns a process shared queue implemented using a pipe and a few
546 locks/semaphores. When a process first puts an item on the queue a feeder
547 thread is started which transfers objects from a buffer into the pipe.
548
549 The usual :exc:`Queue.Empty` and :exc:`Queue.Full` exceptions from the
550 standard library's :mod:`Queue` module are raised to signal timeouts.
551
Sandro Tosi8b48c662012-02-25 19:35:16 +0100552 :class:`~multiprocessing.Queue` implements all the methods of :class:`Queue.Queue` except for
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000553 :meth:`~Queue.Queue.task_done` and :meth:`~Queue.Queue.join`.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000554
555 .. method:: qsize()
556
557 Return the approximate size of the queue. Because of
558 multithreading/multiprocessing semantics, this number is not reliable.
559
560 Note that this may raise :exc:`NotImplementedError` on Unix platforms like
Georg Brandl9af94982008-09-13 17:41:16 +0000561 Mac OS X where ``sem_getvalue()`` is not implemented.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000562
563 .. method:: empty()
564
565 Return ``True`` if the queue is empty, ``False`` otherwise. Because of
566 multithreading/multiprocessing semantics, this is not reliable.
567
568 .. method:: full()
569
570 Return ``True`` if the queue is full, ``False`` otherwise. Because of
571 multithreading/multiprocessing semantics, this is not reliable.
572
Senthil Kumaran9541f8e2011-09-06 00:23:10 +0800573 .. method:: put(obj[, block[, timeout]])
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000574
Senthil Kumaran9541f8e2011-09-06 00:23:10 +0800575 Put obj into the queue. If the optional argument *block* is ``True``
Andrew M. Kuchlingbe504f12008-06-19 19:48:42 +0000576 (the default) and *timeout* is ``None`` (the default), block if necessary until
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000577 a free slot is available. If *timeout* is a positive number, it blocks at
578 most *timeout* seconds and raises the :exc:`Queue.Full` exception if no
579 free slot was available within that time. Otherwise (*block* is
580 ``False``), put an item on the queue if a free slot is immediately
581 available, else raise the :exc:`Queue.Full` exception (*timeout* is
582 ignored in that case).
583
Senthil Kumaran9541f8e2011-09-06 00:23:10 +0800584 .. method:: put_nowait(obj)
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000585
Senthil Kumaran9541f8e2011-09-06 00:23:10 +0800586 Equivalent to ``put(obj, False)``.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000587
588 .. method:: get([block[, timeout]])
589
590 Remove and return an item from the queue. If optional args *block* is
591 ``True`` (the default) and *timeout* is ``None`` (the default), block if
592 necessary until an item is available. If *timeout* is a positive number,
593 it blocks at most *timeout* seconds and raises the :exc:`Queue.Empty`
594 exception if no item was available within that time. Otherwise (block is
595 ``False``), return an item if one is immediately available, else raise the
596 :exc:`Queue.Empty` exception (*timeout* is ignored in that case).
597
598 .. method:: get_nowait()
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000599
600 Equivalent to ``get(False)``.
601
Sandro Tosi8b48c662012-02-25 19:35:16 +0100602 :class:`~multiprocessing.Queue` has a few additional methods not found in
Andrew M. Kuchlingded01d12008-07-14 00:35:32 +0000603 :class:`Queue.Queue`. These methods are usually unnecessary for most
604 code:
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000605
606 .. method:: close()
607
608 Indicate that no more data will be put on this queue by the current
609 process. The background thread will quit once it has flushed all buffered
610 data to the pipe. This is called automatically when the queue is garbage
611 collected.
612
613 .. method:: join_thread()
614
615 Join the background thread. This can only be used after :meth:`close` has
616 been called. It blocks until the background thread exits, ensuring that
617 all data in the buffer has been flushed to the pipe.
618
619 By default if a process is not the creator of the queue then on exit it
620 will attempt to join the queue's background thread. The process can call
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000621 :meth:`cancel_join_thread` to make :meth:`join_thread` do nothing.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000622
623 .. method:: cancel_join_thread()
624
625 Prevent :meth:`join_thread` from blocking. In particular, this prevents
626 the background thread from being joined automatically when the process
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000627 exits -- see :meth:`join_thread`.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000628
629
Sandro Tosic0b11722012-02-15 22:39:52 +0100630.. class:: multiprocessing.queues.SimpleQueue()
631
Sandro Tosi8b48c662012-02-25 19:35:16 +0100632 It is a simplified :class:`~multiprocessing.Queue` type, very close to a locked :class:`Pipe`.
Sandro Tosic0b11722012-02-15 22:39:52 +0100633
634 .. method:: empty()
635
636 Return ``True`` if the queue is empty, ``False`` otherwise.
637
638 .. method:: get()
639
640 Remove and return an item from the queue.
641
642 .. method:: put(item)
643
644 Put *item* into the queue.
645
646
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000647.. class:: JoinableQueue([maxsize])
648
Sandro Tosi8b48c662012-02-25 19:35:16 +0100649 :class:`JoinableQueue`, a :class:`~multiprocessing.Queue` subclass, is a queue which
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000650 additionally has :meth:`task_done` and :meth:`join` methods.
651
652 .. method:: task_done()
653
654 Indicate that a formerly enqueued task is complete. Used by queue consumer
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000655 threads. For each :meth:`~Queue.get` used to fetch a task, a subsequent
656 call to :meth:`task_done` tells the queue that the processing on the task
657 is complete.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000658
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000659 If a :meth:`~Queue.join` is currently blocking, it will resume when all
660 items have been processed (meaning that a :meth:`task_done` call was
661 received for every item that had been :meth:`~Queue.put` into the queue).
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000662
663 Raises a :exc:`ValueError` if called more times than there were items
664 placed in the queue.
665
666
667 .. method:: join()
668
669 Block until all items in the queue have been gotten and processed.
670
671 The count of unfinished tasks goes up whenever an item is added to the
672 queue. The count goes down whenever a consumer thread calls
673 :meth:`task_done` to indicate that the item was retrieved and all work on
674 it is complete. When the count of unfinished tasks drops to zero,
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000675 :meth:`~Queue.join` unblocks.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000676
677
678Miscellaneous
679~~~~~~~~~~~~~
680
681.. function:: active_children()
682
683 Return list of all live children of the current process.
684
685 Calling this has the side affect of "joining" any processes which have
686 already finished.
687
688.. function:: cpu_count()
689
690 Return the number of CPUs in the system. May raise
691 :exc:`NotImplementedError`.
692
693.. function:: current_process()
694
695 Return the :class:`Process` object corresponding to the current process.
696
697 An analogue of :func:`threading.current_thread`.
698
699.. function:: freeze_support()
700
701 Add support for when a program which uses :mod:`multiprocessing` has been
702 frozen to produce a Windows executable. (Has been tested with **py2exe**,
703 **PyInstaller** and **cx_Freeze**.)
704
705 One needs to call this function straight after the ``if __name__ ==
706 '__main__'`` line of the main module. For example::
707
708 from multiprocessing import Process, freeze_support
709
710 def f():
711 print 'hello world!'
712
713 if __name__ == '__main__':
714 freeze_support()
715 Process(target=f).start()
716
R. David Murray636b23a2009-04-28 16:08:18 +0000717 If the ``freeze_support()`` line is omitted then trying to run the frozen
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000718 executable will raise :exc:`RuntimeError`.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000719
720 If the module is being run normally by the Python interpreter then
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000721 :func:`freeze_support` has no effect.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000722
723.. function:: set_executable()
724
Ezio Melotti062d2b52009-12-19 22:41:49 +0000725 Sets the path of the Python interpreter to use when starting a child process.
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000726 (By default :data:`sys.executable` is used). Embedders will probably need to
727 do some thing like ::
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000728
Eli Bendersky4b76f8a2011-12-31 07:05:12 +0200729 set_executable(os.path.join(sys.exec_prefix, 'pythonw.exe'))
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000730
R. David Murray636b23a2009-04-28 16:08:18 +0000731 before they can create child processes. (Windows only)
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000732
733
734.. note::
735
736 :mod:`multiprocessing` contains no analogues of
737 :func:`threading.active_count`, :func:`threading.enumerate`,
738 :func:`threading.settrace`, :func:`threading.setprofile`,
739 :class:`threading.Timer`, or :class:`threading.local`.
740
741
742Connection Objects
743~~~~~~~~~~~~~~~~~~
744
745Connection objects allow the sending and receiving of picklable objects or
746strings. They can be thought of as message oriented connected sockets.
747
Eli Bendersky4b76f8a2011-12-31 07:05:12 +0200748Connection objects are usually created using :func:`Pipe` -- see also
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000749:ref:`multiprocessing-listeners-clients`.
750
751.. class:: Connection
752
753 .. method:: send(obj)
754
755 Send an object to the other end of the connection which should be read
756 using :meth:`recv`.
757
Jesse Noller5053fbb2009-04-02 04:22:09 +0000758 The object must be picklable. Very large pickles (approximately 32 MB+,
Eli Bendersky4b76f8a2011-12-31 07:05:12 +0200759 though it depends on the OS) may raise a :exc:`ValueError` exception.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000760
761 .. method:: recv()
762
763 Return an object sent from the other end of the connection using
Sandro Tosif788cf72012-01-07 17:56:43 +0100764 :meth:`send`. Blocks until there its something to receive. Raises
765 :exc:`EOFError` if there is nothing left to receive
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000766 and the other end was closed.
767
768 .. method:: fileno()
769
Eli Bendersky4b76f8a2011-12-31 07:05:12 +0200770 Return the file descriptor or handle used by the connection.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000771
772 .. method:: close()
773
774 Close the connection.
775
776 This is called automatically when the connection is garbage collected.
777
778 .. method:: poll([timeout])
779
780 Return whether there is any data available to be read.
781
782 If *timeout* is not specified then it will return immediately. If
783 *timeout* is a number then this specifies the maximum time in seconds to
784 block. If *timeout* is ``None`` then an infinite timeout is used.
785
786 .. method:: send_bytes(buffer[, offset[, size]])
787
788 Send byte data from an object supporting the buffer interface as a
789 complete message.
790
791 If *offset* is given then data is read from that position in *buffer*. If
Jesse Noller5053fbb2009-04-02 04:22:09 +0000792 *size* is given then that many bytes will be read from buffer. Very large
793 buffers (approximately 32 MB+, though it depends on the OS) may raise a
Eli Bendersky4b76f8a2011-12-31 07:05:12 +0200794 :exc:`ValueError` exception
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000795
796 .. method:: recv_bytes([maxlength])
797
798 Return a complete message of byte data sent from the other end of the
Sandro Tosif788cf72012-01-07 17:56:43 +0100799 connection as a string. Blocks until there is something to receive.
800 Raises :exc:`EOFError` if there is nothing left
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000801 to receive and the other end has closed.
802
803 If *maxlength* is specified and the message is longer than *maxlength*
804 then :exc:`IOError` is raised and the connection will no longer be
805 readable.
806
807 .. method:: recv_bytes_into(buffer[, offset])
808
809 Read into *buffer* a complete message of byte data sent from the other end
Sandro Tosif788cf72012-01-07 17:56:43 +0100810 of the connection and return the number of bytes in the message. Blocks
811 until there is something to receive. Raises
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000812 :exc:`EOFError` if there is nothing left to receive and the other end was
813 closed.
814
815 *buffer* must be an object satisfying the writable buffer interface. If
816 *offset* is given then the message will be written into the buffer from
R. David Murray636b23a2009-04-28 16:08:18 +0000817 that position. Offset must be a non-negative integer less than the
818 length of *buffer* (in bytes).
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000819
820 If the buffer is too short then a :exc:`BufferTooShort` exception is
821 raised and the complete message is available as ``e.args[0]`` where ``e``
822 is the exception instance.
823
824
825For example:
826
R. David Murray636b23a2009-04-28 16:08:18 +0000827.. doctest::
828
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000829 >>> from multiprocessing import Pipe
830 >>> a, b = Pipe()
831 >>> a.send([1, 'hello', None])
832 >>> b.recv()
833 [1, 'hello', None]
834 >>> b.send_bytes('thank you')
835 >>> a.recv_bytes()
836 'thank you'
837 >>> import array
838 >>> arr1 = array.array('i', range(5))
839 >>> arr2 = array.array('i', [0] * 10)
840 >>> a.send_bytes(arr1)
841 >>> count = b.recv_bytes_into(arr2)
842 >>> assert count == len(arr1) * arr1.itemsize
843 >>> arr2
844 array('i', [0, 1, 2, 3, 4, 0, 0, 0, 0, 0])
845
846
847.. warning::
848
849 The :meth:`Connection.recv` method automatically unpickles the data it
850 receives, which can be a security risk unless you can trust the process
851 which sent the message.
852
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000853 Therefore, unless the connection object was produced using :func:`Pipe` you
854 should only use the :meth:`~Connection.recv` and :meth:`~Connection.send`
855 methods after performing some sort of authentication. See
856 :ref:`multiprocessing-auth-keys`.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000857
858.. warning::
859
860 If a process is killed while it is trying to read or write to a pipe then
861 the data in the pipe is likely to become corrupted, because it may become
862 impossible to be sure where the message boundaries lie.
863
864
865Synchronization primitives
866~~~~~~~~~~~~~~~~~~~~~~~~~~
867
868Generally synchronization primitives are not as necessary in a multiprocess
Andrew M. Kuchling8ea605c2008-07-14 01:18:16 +0000869program as they are in a multithreaded program. See the documentation for
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000870:mod:`threading` module.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000871
872Note that one can also create synchronization primitives by using a manager
873object -- see :ref:`multiprocessing-managers`.
874
875.. class:: BoundedSemaphore([value])
876
877 A bounded semaphore object: a clone of :class:`threading.BoundedSemaphore`.
878
Georg Brandl042d6a42010-05-21 21:47:05 +0000879 (On Mac OS X, this is indistinguishable from :class:`Semaphore` because
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000880 ``sem_getvalue()`` is not implemented on that platform).
881
882.. class:: Condition([lock])
883
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000884 A condition variable: a clone of :class:`threading.Condition`.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000885
886 If *lock* is specified then it should be a :class:`Lock` or :class:`RLock`
887 object from :mod:`multiprocessing`.
888
889.. class:: Event()
890
891 A clone of :class:`threading.Event`.
Jesse Noller02cb0eb2009-04-01 03:45:50 +0000892 This method returns the state of the internal semaphore on exit, so it
893 will always return ``True`` except if a timeout is given and the operation
894 times out.
895
896 .. versionchanged:: 2.7
897 Previously, the method always returned ``None``.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000898
899.. class:: Lock()
900
901 A non-recursive lock object: a clone of :class:`threading.Lock`.
902
903.. class:: RLock()
904
905 A recursive lock object: a clone of :class:`threading.RLock`.
906
907.. class:: Semaphore([value])
908
Ross Lagerwalla3ed3f02011-03-14 10:43:36 +0200909 A semaphore object: a clone of :class:`threading.Semaphore`.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000910
911.. note::
912
Benjamin Peterson910c2ab2008-06-27 23:22:06 +0000913 The :meth:`acquire` method of :class:`BoundedSemaphore`, :class:`Lock`,
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000914 :class:`RLock` and :class:`Semaphore` has a timeout parameter not supported
915 by the equivalents in :mod:`threading`. The signature is
916 ``acquire(block=True, timeout=None)`` with keyword parameters being
917 acceptable. If *block* is ``True`` and *timeout* is not ``None`` then it
918 specifies a timeout in seconds. If *block* is ``False`` then *timeout* is
919 ignored.
Georg Brandlc62ef8b2009-01-03 20:55:06 +0000920
Georg Brandl042d6a42010-05-21 21:47:05 +0000921 On Mac OS X, ``sem_timedwait`` is unsupported, so calling ``acquire()`` with
922 a timeout will emulate that function's behavior using a sleeping loop.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000923
924.. note::
925
926 If the SIGINT signal generated by Ctrl-C arrives while the main thread is
927 blocked by a call to :meth:`BoundedSemaphore.acquire`, :meth:`Lock.acquire`,
928 :meth:`RLock.acquire`, :meth:`Semaphore.acquire`, :meth:`Condition.acquire`
929 or :meth:`Condition.wait` then the call will be immediately interrupted and
930 :exc:`KeyboardInterrupt` will be raised.
931
932 This differs from the behaviour of :mod:`threading` where SIGINT will be
933 ignored while the equivalent blocking calls are in progress.
934
935
936Shared :mod:`ctypes` Objects
937~~~~~~~~~~~~~~~~~~~~~~~~~~~~
938
939It is possible to create shared objects using shared memory which can be
940inherited by child processes.
941
Jesse Noller6ab22152009-01-18 02:45:38 +0000942.. function:: Value(typecode_or_type, *args[, lock])
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000943
944 Return a :mod:`ctypes` object allocated from shared memory. By default the
945 return value is actually a synchronized wrapper for the object.
946
947 *typecode_or_type* determines the type of the returned object: it is either a
948 ctypes type or a one character typecode of the kind used by the :mod:`array`
949 module. *\*args* is passed on to the constructor for the type.
950
951 If *lock* is ``True`` (the default) then a new lock object is created to
952 synchronize access to the value. If *lock* is a :class:`Lock` or
953 :class:`RLock` object then that will be used to synchronize access to the
954 value. If *lock* is ``False`` then access to the returned object will not be
955 automatically protected by a lock, so it will not necessarily be
956 "process-safe".
957
958 Note that *lock* is a keyword-only argument.
959
960.. function:: Array(typecode_or_type, size_or_initializer, *, lock=True)
961
962 Return a ctypes array allocated from shared memory. By default the return
963 value is actually a synchronized wrapper for the array.
964
965 *typecode_or_type* determines the type of the elements of the returned array:
966 it is either a ctypes type or a one character typecode of the kind used by
967 the :mod:`array` module. If *size_or_initializer* is an integer, then it
968 determines the length of the array, and the array will be initially zeroed.
969 Otherwise, *size_or_initializer* is a sequence which is used to initialize
970 the array and whose length determines the length of the array.
971
972 If *lock* is ``True`` (the default) then a new lock object is created to
973 synchronize access to the value. If *lock* is a :class:`Lock` or
974 :class:`RLock` object then that will be used to synchronize access to the
975 value. If *lock* is ``False`` then access to the returned object will not be
976 automatically protected by a lock, so it will not necessarily be
977 "process-safe".
978
979 Note that *lock* is a keyword only argument.
980
Georg Brandlb053f992008-11-22 08:34:14 +0000981 Note that an array of :data:`ctypes.c_char` has *value* and *raw*
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000982 attributes which allow one to use it to store and retrieve strings.
983
984
985The :mod:`multiprocessing.sharedctypes` module
986>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
987
988.. module:: multiprocessing.sharedctypes
989 :synopsis: Allocate ctypes objects from shared memory.
990
991The :mod:`multiprocessing.sharedctypes` module provides functions for allocating
992:mod:`ctypes` objects from shared memory which can be inherited by child
993processes.
994
995.. note::
996
Benjamin Peterson90f36732008-07-12 20:16:19 +0000997 Although it is possible to store a pointer in shared memory remember that
998 this will refer to a location in the address space of a specific process.
Benjamin Peterson190d56e2008-06-11 02:40:25 +0000999 However, the pointer is quite likely to be invalid in the context of a second
1000 process and trying to dereference the pointer from the second process may
1001 cause a crash.
1002
1003.. function:: RawArray(typecode_or_type, size_or_initializer)
1004
1005 Return a ctypes array allocated from shared memory.
1006
1007 *typecode_or_type* determines the type of the elements of the returned array:
1008 it is either a ctypes type or a one character typecode of the kind used by
1009 the :mod:`array` module. If *size_or_initializer* is an integer then it
1010 determines the length of the array, and the array will be initially zeroed.
1011 Otherwise *size_or_initializer* is a sequence which is used to initialize the
1012 array and whose length determines the length of the array.
1013
1014 Note that setting and getting an element is potentially non-atomic -- use
1015 :func:`Array` instead to make sure that access is automatically synchronized
1016 using a lock.
1017
1018.. function:: RawValue(typecode_or_type, *args)
1019
1020 Return a ctypes object allocated from shared memory.
1021
1022 *typecode_or_type* determines the type of the returned object: it is either a
1023 ctypes type or a one character typecode of the kind used by the :mod:`array`
Jesse Noller6ab22152009-01-18 02:45:38 +00001024 module. *\*args* is passed on to the constructor for the type.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001025
1026 Note that setting and getting the value is potentially non-atomic -- use
1027 :func:`Value` instead to make sure that access is automatically synchronized
1028 using a lock.
1029
Georg Brandlb053f992008-11-22 08:34:14 +00001030 Note that an array of :data:`ctypes.c_char` has ``value`` and ``raw``
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001031 attributes which allow one to use it to store and retrieve strings -- see
1032 documentation for :mod:`ctypes`.
1033
Jesse Noller6ab22152009-01-18 02:45:38 +00001034.. function:: Array(typecode_or_type, size_or_initializer, *args[, lock])
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001035
1036 The same as :func:`RawArray` except that depending on the value of *lock* a
1037 process-safe synchronization wrapper may be returned instead of a raw ctypes
1038 array.
1039
1040 If *lock* is ``True`` (the default) then a new lock object is created to
1041 synchronize access to the value. If *lock* is a :class:`Lock` or
1042 :class:`RLock` object then that will be used to synchronize access to the
1043 value. If *lock* is ``False`` then access to the returned object will not be
1044 automatically protected by a lock, so it will not necessarily be
1045 "process-safe".
1046
1047 Note that *lock* is a keyword-only argument.
1048
1049.. function:: Value(typecode_or_type, *args[, lock])
1050
1051 The same as :func:`RawValue` except that depending on the value of *lock* a
1052 process-safe synchronization wrapper may be returned instead of a raw ctypes
1053 object.
1054
1055 If *lock* is ``True`` (the default) then a new lock object is created to
1056 synchronize access to the value. If *lock* is a :class:`Lock` or
1057 :class:`RLock` object then that will be used to synchronize access to the
1058 value. If *lock* is ``False`` then access to the returned object will not be
1059 automatically protected by a lock, so it will not necessarily be
1060 "process-safe".
1061
1062 Note that *lock* is a keyword-only argument.
1063
1064.. function:: copy(obj)
1065
1066 Return a ctypes object allocated from shared memory which is a copy of the
1067 ctypes object *obj*.
1068
1069.. function:: synchronized(obj[, lock])
1070
1071 Return a process-safe wrapper object for a ctypes object which uses *lock* to
1072 synchronize access. If *lock* is ``None`` (the default) then a
1073 :class:`multiprocessing.RLock` object is created automatically.
1074
1075 A synchronized wrapper will have two methods in addition to those of the
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001076 object it wraps: :meth:`get_obj` returns the wrapped object and
1077 :meth:`get_lock` returns the lock object used for synchronization.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001078
1079 Note that accessing the ctypes object through the wrapper can be a lot slower
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001080 than accessing the raw ctypes object.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001081
1082
1083The table below compares the syntax for creating shared ctypes objects from
1084shared memory with the normal ctypes syntax. (In the table ``MyStruct`` is some
1085subclass of :class:`ctypes.Structure`.)
1086
1087==================== ========================== ===========================
1088ctypes sharedctypes using type sharedctypes using typecode
1089==================== ========================== ===========================
1090c_double(2.4) RawValue(c_double, 2.4) RawValue('d', 2.4)
1091MyStruct(4, 6) RawValue(MyStruct, 4, 6)
1092(c_short * 7)() RawArray(c_short, 7) RawArray('h', 7)
1093(c_int * 3)(9, 2, 8) RawArray(c_int, (9, 2, 8)) RawArray('i', (9, 2, 8))
1094==================== ========================== ===========================
1095
1096
1097Below is an example where a number of ctypes objects are modified by a child
1098process::
1099
1100 from multiprocessing import Process, Lock
1101 from multiprocessing.sharedctypes import Value, Array
1102 from ctypes import Structure, c_double
1103
1104 class Point(Structure):
1105 _fields_ = [('x', c_double), ('y', c_double)]
1106
1107 def modify(n, x, s, A):
1108 n.value **= 2
1109 x.value **= 2
1110 s.value = s.value.upper()
1111 for a in A:
1112 a.x **= 2
1113 a.y **= 2
1114
1115 if __name__ == '__main__':
1116 lock = Lock()
1117
1118 n = Value('i', 7)
R. David Murray636b23a2009-04-28 16:08:18 +00001119 x = Value(c_double, 1.0/3.0, lock=False)
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001120 s = Array('c', 'hello world', lock=lock)
1121 A = Array(Point, [(1.875,-6.25), (-5.75,2.0), (2.375,9.5)], lock=lock)
1122
1123 p = Process(target=modify, args=(n, x, s, A))
1124 p.start()
1125 p.join()
1126
1127 print n.value
1128 print x.value
1129 print s.value
1130 print [(a.x, a.y) for a in A]
1131
1132
1133.. highlightlang:: none
1134
1135The results printed are ::
1136
1137 49
1138 0.1111111111111111
1139 HELLO WORLD
1140 [(3.515625, 39.0625), (33.0625, 4.0), (5.640625, 90.25)]
1141
1142.. highlightlang:: python
1143
1144
1145.. _multiprocessing-managers:
1146
1147Managers
1148~~~~~~~~
1149
1150Managers provide a way to create data which can be shared between different
1151processes. A manager object controls a server process which manages *shared
1152objects*. Other processes can access the shared objects by using proxies.
1153
1154.. function:: multiprocessing.Manager()
1155
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001156 Returns a started :class:`~multiprocessing.managers.SyncManager` object which
1157 can be used for sharing objects between processes. The returned manager
1158 object corresponds to a spawned child process and has methods which will
1159 create shared objects and return corresponding proxies.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001160
1161.. module:: multiprocessing.managers
1162 :synopsis: Share data between process with shared objects.
1163
1164Manager processes will be shutdown as soon as they are garbage collected or
1165their parent process exits. The manager classes are defined in the
1166:mod:`multiprocessing.managers` module:
1167
1168.. class:: BaseManager([address[, authkey]])
1169
1170 Create a BaseManager object.
1171
Jack Diederich1605b332010-02-23 17:23:30 +00001172 Once created one should call :meth:`start` or ``get_server().serve_forever()`` to ensure
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001173 that the manager object refers to a started manager process.
1174
1175 *address* is the address on which the manager process listens for new
1176 connections. If *address* is ``None`` then an arbitrary one is chosen.
1177
1178 *authkey* is the authentication key which will be used to check the validity
1179 of incoming connections to the server process. If *authkey* is ``None`` then
Benjamin Peterson73641d72008-08-20 14:07:59 +00001180 ``current_process().authkey``. Otherwise *authkey* is used and it
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001181 must be a string.
1182
Jesse Noller7152f6d2009-04-02 05:17:26 +00001183 .. method:: start([initializer[, initargs]])
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001184
Jesse Noller7152f6d2009-04-02 05:17:26 +00001185 Start a subprocess to start the manager. If *initializer* is not ``None``
1186 then the subprocess will call ``initializer(*initargs)`` when it starts.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001187
Jesse Nollera280fd72008-11-28 18:22:54 +00001188 .. method:: get_server()
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001189
Jesse Nollera280fd72008-11-28 18:22:54 +00001190 Returns a :class:`Server` object which represents the actual server under
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001191 the control of the Manager. The :class:`Server` object supports the
R. David Murray636b23a2009-04-28 16:08:18 +00001192 :meth:`serve_forever` method::
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001193
Georg Brandlfc29f272009-01-02 20:25:14 +00001194 >>> from multiprocessing.managers import BaseManager
R. David Murray636b23a2009-04-28 16:08:18 +00001195 >>> manager = BaseManager(address=('', 50000), authkey='abc')
1196 >>> server = manager.get_server()
1197 >>> server.serve_forever()
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001198
R. David Murray636b23a2009-04-28 16:08:18 +00001199 :class:`Server` additionally has an :attr:`address` attribute.
Jesse Nollera280fd72008-11-28 18:22:54 +00001200
1201 .. method:: connect()
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001202
R. David Murray636b23a2009-04-28 16:08:18 +00001203 Connect a local manager object to a remote manager process::
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001204
Jesse Nollera280fd72008-11-28 18:22:54 +00001205 >>> from multiprocessing.managers import BaseManager
R. David Murray636b23a2009-04-28 16:08:18 +00001206 >>> m = BaseManager(address=('127.0.0.1', 5000), authkey='abc')
Jesse Nollera280fd72008-11-28 18:22:54 +00001207 >>> m.connect()
1208
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001209 .. method:: shutdown()
1210
1211 Stop the process used by the manager. This is only available if
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001212 :meth:`start` has been used to start the server process.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001213
1214 This can be called multiple times.
1215
1216 .. method:: register(typeid[, callable[, proxytype[, exposed[, method_to_typeid[, create_method]]]]])
1217
1218 A classmethod which can be used for registering a type or callable with
1219 the manager class.
1220
1221 *typeid* is a "type identifier" which is used to identify a particular
1222 type of shared object. This must be a string.
1223
1224 *callable* is a callable used for creating objects for this type
1225 identifier. If a manager instance will be created using the
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001226 :meth:`from_address` classmethod or if the *create_method* argument is
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001227 ``False`` then this can be left as ``None``.
1228
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001229 *proxytype* is a subclass of :class:`BaseProxy` which is used to create
1230 proxies for shared objects with this *typeid*. If ``None`` then a proxy
1231 class is created automatically.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001232
1233 *exposed* is used to specify a sequence of method names which proxies for
1234 this typeid should be allowed to access using
1235 :meth:`BaseProxy._callMethod`. (If *exposed* is ``None`` then
1236 :attr:`proxytype._exposed_` is used instead if it exists.) In the case
1237 where no exposed list is specified, all "public methods" of the shared
1238 object will be accessible. (Here a "public method" means any attribute
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001239 which has a :meth:`__call__` method and whose name does not begin with
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001240 ``'_'``.)
1241
1242 *method_to_typeid* is a mapping used to specify the return type of those
1243 exposed methods which should return a proxy. It maps method names to
1244 typeid strings. (If *method_to_typeid* is ``None`` then
1245 :attr:`proxytype._method_to_typeid_` is used instead if it exists.) If a
1246 method's name is not a key of this mapping or if the mapping is ``None``
1247 then the object returned by the method will be copied by value.
1248
1249 *create_method* determines whether a method should be created with name
1250 *typeid* which can be used to tell the server process to create a new
1251 shared object and return a proxy for it. By default it is ``True``.
1252
1253 :class:`BaseManager` instances also have one read-only property:
1254
1255 .. attribute:: address
1256
1257 The address used by the manager.
1258
1259
1260.. class:: SyncManager
1261
1262 A subclass of :class:`BaseManager` which can be used for the synchronization
1263 of processes. Objects of this type are returned by
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001264 :func:`multiprocessing.Manager`.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001265
1266 It also supports creation of shared lists and dictionaries.
1267
1268 .. method:: BoundedSemaphore([value])
1269
1270 Create a shared :class:`threading.BoundedSemaphore` object and return a
1271 proxy for it.
1272
1273 .. method:: Condition([lock])
1274
1275 Create a shared :class:`threading.Condition` object and return a proxy for
1276 it.
1277
1278 If *lock* is supplied then it should be a proxy for a
1279 :class:`threading.Lock` or :class:`threading.RLock` object.
1280
1281 .. method:: Event()
1282
1283 Create a shared :class:`threading.Event` object and return a proxy for it.
1284
1285 .. method:: Lock()
1286
1287 Create a shared :class:`threading.Lock` object and return a proxy for it.
1288
1289 .. method:: Namespace()
1290
1291 Create a shared :class:`Namespace` object and return a proxy for it.
1292
1293 .. method:: Queue([maxsize])
1294
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001295 Create a shared :class:`Queue.Queue` object and return a proxy for it.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001296
1297 .. method:: RLock()
1298
1299 Create a shared :class:`threading.RLock` object and return a proxy for it.
1300
1301 .. method:: Semaphore([value])
1302
1303 Create a shared :class:`threading.Semaphore` object and return a proxy for
1304 it.
1305
1306 .. method:: Array(typecode, sequence)
1307
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001308 Create an array and return a proxy for it.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001309
1310 .. method:: Value(typecode, value)
1311
1312 Create an object with a writable ``value`` attribute and return a proxy
1313 for it.
1314
1315 .. method:: dict()
1316 dict(mapping)
1317 dict(sequence)
1318
1319 Create a shared ``dict`` object and return a proxy for it.
1320
1321 .. method:: list()
1322 list(sequence)
1323
1324 Create a shared ``list`` object and return a proxy for it.
1325
Georg Brandl78f11ed2010-11-26 07:34:20 +00001326 .. note::
1327
1328 Modifications to mutable values or items in dict and list proxies will not
1329 be propagated through the manager, because the proxy has no way of knowing
1330 when its values or items are modified. To modify such an item, you can
1331 re-assign the modified object to the container proxy::
1332
1333 # create a list proxy and append a mutable object (a dictionary)
1334 lproxy = manager.list()
1335 lproxy.append({})
1336 # now mutate the dictionary
1337 d = lproxy[0]
1338 d['a'] = 1
1339 d['b'] = 2
1340 # at this point, the changes to d are not yet synced, but by
1341 # reassigning the dictionary, the proxy is notified of the change
1342 lproxy[0] = d
1343
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001344
1345Namespace objects
1346>>>>>>>>>>>>>>>>>
1347
1348A namespace object has no public methods, but does have writable attributes.
1349Its representation shows the values of its attributes.
1350
1351However, when using a proxy for a namespace object, an attribute beginning with
R. David Murray636b23a2009-04-28 16:08:18 +00001352``'_'`` will be an attribute of the proxy and not an attribute of the referent:
1353
1354.. doctest::
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001355
1356 >>> manager = multiprocessing.Manager()
1357 >>> Global = manager.Namespace()
1358 >>> Global.x = 10
1359 >>> Global.y = 'hello'
1360 >>> Global._z = 12.3 # this is an attribute of the proxy
1361 >>> print Global
1362 Namespace(x=10, y='hello')
1363
1364
1365Customized managers
1366>>>>>>>>>>>>>>>>>>>
1367
1368To create one's own manager, one creates a subclass of :class:`BaseManager` and
Eli Bendersky4b76f8a2011-12-31 07:05:12 +02001369uses the :meth:`~BaseManager.register` classmethod to register new types or
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001370callables with the manager class. For example::
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001371
1372 from multiprocessing.managers import BaseManager
1373
1374 class MathsClass(object):
1375 def add(self, x, y):
1376 return x + y
1377 def mul(self, x, y):
1378 return x * y
1379
1380 class MyManager(BaseManager):
1381 pass
1382
1383 MyManager.register('Maths', MathsClass)
1384
1385 if __name__ == '__main__':
1386 manager = MyManager()
1387 manager.start()
1388 maths = manager.Maths()
1389 print maths.add(4, 3) # prints 7
1390 print maths.mul(7, 8) # prints 56
1391
1392
1393Using a remote manager
1394>>>>>>>>>>>>>>>>>>>>>>
1395
1396It is possible to run a manager server on one machine and have clients use it
1397from other machines (assuming that the firewalls involved allow it).
1398
1399Running the following commands creates a server for a single shared queue which
1400remote clients can access::
1401
1402 >>> from multiprocessing.managers import BaseManager
1403 >>> import Queue
1404 >>> queue = Queue.Queue()
1405 >>> class QueueManager(BaseManager): pass
Jesse Nollera280fd72008-11-28 18:22:54 +00001406 >>> QueueManager.register('get_queue', callable=lambda:queue)
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001407 >>> m = QueueManager(address=('', 50000), authkey='abracadabra')
Jesse Nollera280fd72008-11-28 18:22:54 +00001408 >>> s = m.get_server()
R. David Murray636b23a2009-04-28 16:08:18 +00001409 >>> s.serve_forever()
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001410
1411One client can access the server as follows::
1412
1413 >>> from multiprocessing.managers import BaseManager
1414 >>> class QueueManager(BaseManager): pass
Jesse Nollera280fd72008-11-28 18:22:54 +00001415 >>> QueueManager.register('get_queue')
1416 >>> m = QueueManager(address=('foo.bar.org', 50000), authkey='abracadabra')
1417 >>> m.connect()
1418 >>> queue = m.get_queue()
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001419 >>> queue.put('hello')
1420
1421Another client can also use it::
1422
1423 >>> from multiprocessing.managers import BaseManager
1424 >>> class QueueManager(BaseManager): pass
R. David Murray636b23a2009-04-28 16:08:18 +00001425 >>> QueueManager.register('get_queue')
1426 >>> m = QueueManager(address=('foo.bar.org', 50000), authkey='abracadabra')
1427 >>> m.connect()
1428 >>> queue = m.get_queue()
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001429 >>> queue.get()
1430 'hello'
1431
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001432Local processes can also access that queue, using the code from above on the
Jesse Nollera280fd72008-11-28 18:22:54 +00001433client to access it remotely::
1434
1435 >>> from multiprocessing import Process, Queue
1436 >>> from multiprocessing.managers import BaseManager
1437 >>> class Worker(Process):
1438 ... def __init__(self, q):
1439 ... self.q = q
1440 ... super(Worker, self).__init__()
1441 ... def run(self):
1442 ... self.q.put('local hello')
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001443 ...
Jesse Nollera280fd72008-11-28 18:22:54 +00001444 >>> queue = Queue()
1445 >>> w = Worker(queue)
1446 >>> w.start()
1447 >>> class QueueManager(BaseManager): pass
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001448 ...
Jesse Nollera280fd72008-11-28 18:22:54 +00001449 >>> QueueManager.register('get_queue', callable=lambda: queue)
1450 >>> m = QueueManager(address=('', 50000), authkey='abracadabra')
1451 >>> s = m.get_server()
1452 >>> s.serve_forever()
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001453
1454Proxy Objects
1455~~~~~~~~~~~~~
1456
1457A proxy is an object which *refers* to a shared object which lives (presumably)
1458in a different process. The shared object is said to be the *referent* of the
1459proxy. Multiple proxy objects may have the same referent.
1460
1461A proxy object has methods which invoke corresponding methods of its referent
1462(although not every method of the referent will necessarily be available through
1463the proxy). A proxy can usually be used in most of the same ways that its
R. David Murray636b23a2009-04-28 16:08:18 +00001464referent can:
1465
1466.. doctest::
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001467
1468 >>> from multiprocessing import Manager
1469 >>> manager = Manager()
1470 >>> l = manager.list([i*i for i in range(10)])
1471 >>> print l
1472 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1473 >>> print repr(l)
R. David Murray636b23a2009-04-28 16:08:18 +00001474 <ListProxy object, typeid 'list' at 0x...>
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001475 >>> l[4]
1476 16
1477 >>> l[2:5]
1478 [4, 9, 16]
1479
1480Notice that applying :func:`str` to a proxy will return the representation of
1481the referent, whereas applying :func:`repr` will return the representation of
1482the proxy.
1483
1484An important feature of proxy objects is that they are picklable so they can be
1485passed between processes. Note, however, that if a proxy is sent to the
1486corresponding manager's process then unpickling it will produce the referent
R. David Murray636b23a2009-04-28 16:08:18 +00001487itself. This means, for example, that one shared object can contain a second:
1488
1489.. doctest::
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001490
1491 >>> a = manager.list()
1492 >>> b = manager.list()
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001493 >>> a.append(b) # referent of a now contains referent of b
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001494 >>> print a, b
1495 [[]] []
1496 >>> b.append('hello')
1497 >>> print a, b
1498 [['hello']] ['hello']
1499
1500.. note::
1501
1502 The proxy types in :mod:`multiprocessing` do nothing to support comparisons
R. David Murray636b23a2009-04-28 16:08:18 +00001503 by value. So, for instance, we have:
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001504
R. David Murray636b23a2009-04-28 16:08:18 +00001505 .. doctest::
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001506
R. David Murray636b23a2009-04-28 16:08:18 +00001507 >>> manager.list([1,2,3]) == [1,2,3]
1508 False
1509
1510 One should just use a copy of the referent instead when making comparisons.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001511
1512.. class:: BaseProxy
1513
1514 Proxy objects are instances of subclasses of :class:`BaseProxy`.
1515
Benjamin Peterson2b97b712008-12-19 02:31:35 +00001516 .. method:: _callmethod(methodname[, args[, kwds]])
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001517
1518 Call and return the result of a method of the proxy's referent.
1519
1520 If ``proxy`` is a proxy whose referent is ``obj`` then the expression ::
1521
Benjamin Peterson2b97b712008-12-19 02:31:35 +00001522 proxy._callmethod(methodname, args, kwds)
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001523
1524 will evaluate the expression ::
1525
1526 getattr(obj, methodname)(*args, **kwds)
1527
1528 in the manager's process.
1529
1530 The returned value will be a copy of the result of the call or a proxy to
1531 a new shared object -- see documentation for the *method_to_typeid*
1532 argument of :meth:`BaseManager.register`.
1533
Ezio Melotti1e87da12011-10-19 10:39:35 +03001534 If an exception is raised by the call, then is re-raised by
Benjamin Peterson2b97b712008-12-19 02:31:35 +00001535 :meth:`_callmethod`. If some other exception is raised in the manager's
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001536 process then this is converted into a :exc:`RemoteError` exception and is
Benjamin Peterson2b97b712008-12-19 02:31:35 +00001537 raised by :meth:`_callmethod`.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001538
1539 Note in particular that an exception will be raised if *methodname* has
1540 not been *exposed*
1541
R. David Murray636b23a2009-04-28 16:08:18 +00001542 An example of the usage of :meth:`_callmethod`:
1543
1544 .. doctest::
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001545
1546 >>> l = manager.list(range(10))
Benjamin Peterson2b97b712008-12-19 02:31:35 +00001547 >>> l._callmethod('__len__')
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001548 10
Benjamin Peterson2b97b712008-12-19 02:31:35 +00001549 >>> l._callmethod('__getslice__', (2, 7)) # equiv to `l[2:7]`
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001550 [2, 3, 4, 5, 6]
Benjamin Peterson2b97b712008-12-19 02:31:35 +00001551 >>> l._callmethod('__getitem__', (20,)) # equiv to `l[20]`
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001552 Traceback (most recent call last):
1553 ...
1554 IndexError: list index out of range
1555
Benjamin Peterson2b97b712008-12-19 02:31:35 +00001556 .. method:: _getvalue()
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001557
1558 Return a copy of the referent.
1559
1560 If the referent is unpicklable then this will raise an exception.
1561
1562 .. method:: __repr__
1563
1564 Return a representation of the proxy object.
1565
1566 .. method:: __str__
1567
1568 Return the representation of the referent.
1569
1570
1571Cleanup
1572>>>>>>>
1573
1574A proxy object uses a weakref callback so that when it gets garbage collected it
1575deregisters itself from the manager which owns its referent.
1576
1577A shared object gets deleted from the manager process when there are no longer
1578any proxies referring to it.
1579
1580
1581Process Pools
1582~~~~~~~~~~~~~
1583
1584.. module:: multiprocessing.pool
1585 :synopsis: Create pools of processes.
1586
1587One can create a pool of processes which will carry out tasks submitted to it
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001588with the :class:`Pool` class.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001589
Jesse Noller654ade32010-01-27 03:05:57 +00001590.. class:: multiprocessing.Pool([processes[, initializer[, initargs[, maxtasksperchild]]]])
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001591
1592 A process pool object which controls a pool of worker processes to which jobs
1593 can be submitted. It supports asynchronous results with timeouts and
1594 callbacks and has a parallel map implementation.
1595
1596 *processes* is the number of worker processes to use. If *processes* is
1597 ``None`` then the number returned by :func:`cpu_count` is used. If
1598 *initializer* is not ``None`` then each worker process will call
1599 ``initializer(*initargs)`` when it starts.
1600
Georg Brandl92e69722010-10-17 06:21:30 +00001601 .. versionadded:: 2.7
1602 *maxtasksperchild* is the number of tasks a worker process can complete
1603 before it will exit and be replaced with a fresh worker process, to enable
1604 unused resources to be freed. The default *maxtasksperchild* is None, which
1605 means worker processes will live as long as the pool.
Jesse Noller654ade32010-01-27 03:05:57 +00001606
1607 .. note::
1608
Georg Brandl92e69722010-10-17 06:21:30 +00001609 Worker processes within a :class:`Pool` typically live for the complete
1610 duration of the Pool's work queue. A frequent pattern found in other
1611 systems (such as Apache, mod_wsgi, etc) to free resources held by
1612 workers is to allow a worker within a pool to complete only a set
1613 amount of work before being exiting, being cleaned up and a new
1614 process spawned to replace the old one. The *maxtasksperchild*
1615 argument to the :class:`Pool` exposes this ability to the end user.
Jesse Noller654ade32010-01-27 03:05:57 +00001616
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001617 .. method:: apply(func[, args[, kwds]])
1618
Eli Bendersky4b76f8a2011-12-31 07:05:12 +02001619 Equivalent of the :func:`apply` built-in function. It blocks until the
1620 result is ready, so :meth:`apply_async` is better suited for performing
1621 work in parallel. Additionally, *func* is only executed in one of the
1622 workers of the pool.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001623
1624 .. method:: apply_async(func[, args[, kwds[, callback]]])
1625
1626 A variant of the :meth:`apply` method which returns a result object.
1627
1628 If *callback* is specified then it should be a callable which accepts a
1629 single argument. When the result becomes ready *callback* is applied to
1630 it (unless the call failed). *callback* should complete immediately since
1631 otherwise the thread which handles the results will get blocked.
1632
1633 .. method:: map(func, iterable[, chunksize])
1634
Georg Brandld7d4fd72009-07-26 14:37:28 +00001635 A parallel equivalent of the :func:`map` built-in function (it supports only
Eli Bendersky4b76f8a2011-12-31 07:05:12 +02001636 one *iterable* argument though). It blocks until the result is ready.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001637
1638 This method chops the iterable into a number of chunks which it submits to
1639 the process pool as separate tasks. The (approximate) size of these
1640 chunks can be specified by setting *chunksize* to a positive integer.
1641
Senthil Kumaran0fc13ae2011-11-03 02:02:38 +08001642 .. method:: map_async(func, iterable[, chunksize[, callback]])
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001643
Georg Brandl9fa61bb2009-07-26 14:19:57 +00001644 A variant of the :meth:`.map` method which returns a result object.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001645
1646 If *callback* is specified then it should be a callable which accepts a
1647 single argument. When the result becomes ready *callback* is applied to
1648 it (unless the call failed). *callback* should complete immediately since
1649 otherwise the thread which handles the results will get blocked.
1650
1651 .. method:: imap(func, iterable[, chunksize])
1652
1653 An equivalent of :func:`itertools.imap`.
1654
1655 The *chunksize* argument is the same as the one used by the :meth:`.map`
1656 method. For very long iterables using a large value for *chunksize* can
Ezio Melotti1e87da12011-10-19 10:39:35 +03001657 make the job complete **much** faster than using the default value of
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001658 ``1``.
1659
Georg Brandl9fa61bb2009-07-26 14:19:57 +00001660 Also if *chunksize* is ``1`` then the :meth:`!next` method of the iterator
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001661 returned by the :meth:`imap` method has an optional *timeout* parameter:
1662 ``next(timeout)`` will raise :exc:`multiprocessing.TimeoutError` if the
1663 result cannot be returned within *timeout* seconds.
1664
1665 .. method:: imap_unordered(func, iterable[, chunksize])
1666
1667 The same as :meth:`imap` except that the ordering of the results from the
1668 returned iterator should be considered arbitrary. (Only when there is
1669 only one worker process is the order guaranteed to be "correct".)
1670
1671 .. method:: close()
1672
1673 Prevents any more tasks from being submitted to the pool. Once all the
1674 tasks have been completed the worker processes will exit.
1675
1676 .. method:: terminate()
1677
1678 Stops the worker processes immediately without completing outstanding
1679 work. When the pool object is garbage collected :meth:`terminate` will be
1680 called immediately.
1681
1682 .. method:: join()
1683
1684 Wait for the worker processes to exit. One must call :meth:`close` or
1685 :meth:`terminate` before using :meth:`join`.
1686
1687
1688.. class:: AsyncResult
1689
1690 The class of the result returned by :meth:`Pool.apply_async` and
1691 :meth:`Pool.map_async`.
1692
Jesse Nollera280fd72008-11-28 18:22:54 +00001693 .. method:: get([timeout])
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001694
1695 Return the result when it arrives. If *timeout* is not ``None`` and the
1696 result does not arrive within *timeout* seconds then
1697 :exc:`multiprocessing.TimeoutError` is raised. If the remote call raised
1698 an exception then that exception will be reraised by :meth:`get`.
1699
1700 .. method:: wait([timeout])
1701
1702 Wait until the result is available or until *timeout* seconds pass.
1703
1704 .. method:: ready()
1705
1706 Return whether the call has completed.
1707
1708 .. method:: successful()
1709
1710 Return whether the call completed without raising an exception. Will
1711 raise :exc:`AssertionError` if the result is not ready.
1712
1713The following example demonstrates the use of a pool::
1714
1715 from multiprocessing import Pool
1716
1717 def f(x):
1718 return x*x
1719
1720 if __name__ == '__main__':
1721 pool = Pool(processes=4) # start 4 worker processes
1722
Jesse Nollera280fd72008-11-28 18:22:54 +00001723 result = pool.apply_async(f, (10,)) # evaluate "f(10)" asynchronously
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001724 print result.get(timeout=1) # prints "100" unless your computer is *very* slow
1725
1726 print pool.map(f, range(10)) # prints "[0, 1, 4,..., 81]"
1727
1728 it = pool.imap(f, range(10))
1729 print it.next() # prints "0"
1730 print it.next() # prints "1"
1731 print it.next(timeout=1) # prints "4" unless your computer is *very* slow
1732
1733 import time
Jesse Nollera280fd72008-11-28 18:22:54 +00001734 result = pool.apply_async(time.sleep, (10,))
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001735 print result.get(timeout=1) # raises TimeoutError
1736
1737
1738.. _multiprocessing-listeners-clients:
1739
1740Listeners and Clients
1741~~~~~~~~~~~~~~~~~~~~~
1742
1743.. module:: multiprocessing.connection
1744 :synopsis: API for dealing with sockets.
1745
1746Usually message passing between processes is done using queues or by using
1747:class:`Connection` objects returned by :func:`Pipe`.
1748
1749However, the :mod:`multiprocessing.connection` module allows some extra
1750flexibility. It basically gives a high level message oriented API for dealing
1751with sockets or Windows named pipes, and also has support for *digest
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001752authentication* using the :mod:`hmac` module.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001753
1754
1755.. function:: deliver_challenge(connection, authkey)
1756
1757 Send a randomly generated message to the other end of the connection and wait
1758 for a reply.
1759
1760 If the reply matches the digest of the message using *authkey* as the key
1761 then a welcome message is sent to the other end of the connection. Otherwise
1762 :exc:`AuthenticationError` is raised.
1763
Ezio Melotti3218f652013-04-10 17:59:20 +03001764.. function:: answer_challenge(connection, authkey)
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001765
1766 Receive a message, calculate the digest of the message using *authkey* as the
1767 key, and then send the digest back.
1768
1769 If a welcome message is not received, then :exc:`AuthenticationError` is
1770 raised.
1771
1772.. function:: Client(address[, family[, authenticate[, authkey]]])
1773
1774 Attempt to set up a connection to the listener which is using address
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001775 *address*, returning a :class:`~multiprocessing.Connection`.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001776
1777 The type of the connection is determined by *family* argument, but this can
1778 generally be omitted since it can usually be inferred from the format of
1779 *address*. (See :ref:`multiprocessing-address-formats`)
1780
Jesse Noller34116922009-06-29 18:24:26 +00001781 If *authenticate* is ``True`` or *authkey* is a string then digest
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001782 authentication is used. The key used for authentication will be either
Benjamin Peterson73641d72008-08-20 14:07:59 +00001783 *authkey* or ``current_process().authkey)`` if *authkey* is ``None``.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001784 If authentication fails then :exc:`AuthenticationError` is raised. See
1785 :ref:`multiprocessing-auth-keys`.
1786
1787.. class:: Listener([address[, family[, backlog[, authenticate[, authkey]]]]])
1788
1789 A wrapper for a bound socket or Windows named pipe which is 'listening' for
1790 connections.
1791
1792 *address* is the address to be used by the bound socket or named pipe of the
1793 listener object.
1794
Jesse Nollerb12e79d2009-04-01 16:42:19 +00001795 .. note::
1796
1797 If an address of '0.0.0.0' is used, the address will not be a connectable
1798 end point on Windows. If you require a connectable end-point,
1799 you should use '127.0.0.1'.
1800
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001801 *family* is the type of socket (or named pipe) to use. This can be one of
1802 the strings ``'AF_INET'`` (for a TCP socket), ``'AF_UNIX'`` (for a Unix
1803 domain socket) or ``'AF_PIPE'`` (for a Windows named pipe). Of these only
1804 the first is guaranteed to be available. If *family* is ``None`` then the
1805 family is inferred from the format of *address*. If *address* is also
1806 ``None`` then a default is chosen. This default is the family which is
1807 assumed to be the fastest available. See
1808 :ref:`multiprocessing-address-formats`. Note that if *family* is
1809 ``'AF_UNIX'`` and address is ``None`` then the socket will be created in a
1810 private temporary directory created using :func:`tempfile.mkstemp`.
1811
1812 If the listener object uses a socket then *backlog* (1 by default) is passed
1813 to the :meth:`listen` method of the socket once it has been bound.
1814
1815 If *authenticate* is ``True`` (``False`` by default) or *authkey* is not
1816 ``None`` then digest authentication is used.
1817
1818 If *authkey* is a string then it will be used as the authentication key;
1819 otherwise it must be *None*.
1820
1821 If *authkey* is ``None`` and *authenticate* is ``True`` then
Benjamin Peterson73641d72008-08-20 14:07:59 +00001822 ``current_process().authkey`` is used as the authentication key. If
Jesse Noller34116922009-06-29 18:24:26 +00001823 *authkey* is ``None`` and *authenticate* is ``False`` then no
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001824 authentication is done. If authentication fails then
1825 :exc:`AuthenticationError` is raised. See :ref:`multiprocessing-auth-keys`.
1826
1827 .. method:: accept()
1828
1829 Accept a connection on the bound socket or named pipe of the listener
1830 object and return a :class:`Connection` object. If authentication is
1831 attempted and fails, then :exc:`AuthenticationError` is raised.
1832
1833 .. method:: close()
1834
1835 Close the bound socket or named pipe of the listener object. This is
1836 called automatically when the listener is garbage collected. However it
1837 is advisable to call it explicitly.
1838
1839 Listener objects have the following read-only properties:
1840
1841 .. attribute:: address
1842
1843 The address which is being used by the Listener object.
1844
1845 .. attribute:: last_accepted
1846
1847 The address from which the last accepted connection came. If this is
1848 unavailable then it is ``None``.
1849
1850
1851The module defines two exceptions:
1852
1853.. exception:: AuthenticationError
1854
1855 Exception raised when there is an authentication error.
1856
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001857
1858**Examples**
1859
1860The following server code creates a listener which uses ``'secret password'`` as
1861an authentication key. It then waits for a connection and sends some data to
1862the client::
1863
1864 from multiprocessing.connection import Listener
1865 from array import array
1866
1867 address = ('localhost', 6000) # family is deduced to be 'AF_INET'
1868 listener = Listener(address, authkey='secret password')
1869
1870 conn = listener.accept()
1871 print 'connection accepted from', listener.last_accepted
1872
1873 conn.send([2.25, None, 'junk', float])
1874
1875 conn.send_bytes('hello')
1876
1877 conn.send_bytes(array('i', [42, 1729]))
1878
1879 conn.close()
1880 listener.close()
1881
1882The following code connects to the server and receives some data from the
1883server::
1884
1885 from multiprocessing.connection import Client
1886 from array import array
1887
1888 address = ('localhost', 6000)
1889 conn = Client(address, authkey='secret password')
1890
1891 print conn.recv() # => [2.25, None, 'junk', float]
1892
1893 print conn.recv_bytes() # => 'hello'
1894
1895 arr = array('i', [0, 0, 0, 0, 0])
1896 print conn.recv_bytes_into(arr) # => 8
1897 print arr # => array('i', [42, 1729, 0, 0, 0])
1898
1899 conn.close()
1900
1901
1902.. _multiprocessing-address-formats:
1903
1904Address Formats
1905>>>>>>>>>>>>>>>
1906
Andrew M. Kuchlingbe504f12008-06-19 19:48:42 +00001907* An ``'AF_INET'`` address is a tuple of the form ``(hostname, port)`` where
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001908 *hostname* is a string and *port* is an integer.
1909
Andrew M. Kuchlingbe504f12008-06-19 19:48:42 +00001910* An ``'AF_UNIX'`` address is a string representing a filename on the
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001911 filesystem.
1912
1913* An ``'AF_PIPE'`` address is a string of the form
Georg Brandl6b28f392008-12-27 19:06:04 +00001914 :samp:`r'\\\\.\\pipe\\{PipeName}'`. To use :func:`Client` to connect to a named
Georg Brandlfc29f272009-01-02 20:25:14 +00001915 pipe on a remote computer called *ServerName* one should use an address of the
Georg Brandldd7e3132009-01-04 10:24:09 +00001916 form :samp:`r'\\\\{ServerName}\\pipe\\{PipeName}'` instead.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001917
1918Note that any string beginning with two backslashes is assumed by default to be
1919an ``'AF_PIPE'`` address rather than an ``'AF_UNIX'`` address.
1920
1921
1922.. _multiprocessing-auth-keys:
1923
1924Authentication keys
1925~~~~~~~~~~~~~~~~~~~
1926
1927When one uses :meth:`Connection.recv`, the data received is automatically
1928unpickled. Unfortunately unpickling data from an untrusted source is a security
1929risk. Therefore :class:`Listener` and :func:`Client` use the :mod:`hmac` module
1930to provide digest authentication.
1931
1932An authentication key is a string which can be thought of as a password: once a
1933connection is established both ends will demand proof that the other knows the
1934authentication key. (Demonstrating that both ends are using the same key does
1935**not** involve sending the key over the connection.)
1936
1937If authentication is requested but do authentication key is specified then the
Benjamin Peterson73641d72008-08-20 14:07:59 +00001938return value of ``current_process().authkey`` is used (see
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00001939:class:`~multiprocessing.Process`). This value will automatically inherited by
1940any :class:`~multiprocessing.Process` object that the current process creates.
1941This means that (by default) all processes of a multi-process program will share
1942a single authentication key which can be used when setting up connections
Andrew M. Kuchlinga178a692009-04-03 21:45:29 +00001943between themselves.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001944
1945Suitable authentication keys can also be generated by using :func:`os.urandom`.
1946
1947
1948Logging
1949~~~~~~~
1950
1951Some support for logging is available. Note, however, that the :mod:`logging`
1952package does not use process shared locks so it is possible (depending on the
1953handler type) for messages from different processes to get mixed up.
1954
1955.. currentmodule:: multiprocessing
1956.. function:: get_logger()
1957
1958 Returns the logger used by :mod:`multiprocessing`. If necessary, a new one
1959 will be created.
1960
Jesse Nollerb5a4b0a2009-01-25 03:36:13 +00001961 When first created the logger has level :data:`logging.NOTSET` and no
1962 default handler. Messages sent to this logger will not by default propagate
1963 to the root logger.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001964
1965 Note that on Windows child processes will only inherit the level of the
1966 parent process's logger -- any other customization of the logger will not be
1967 inherited.
1968
Jesse Nollerb5a4b0a2009-01-25 03:36:13 +00001969.. currentmodule:: multiprocessing
1970.. function:: log_to_stderr()
1971
1972 This function performs a call to :func:`get_logger` but in addition to
1973 returning the logger created by get_logger, it adds a handler which sends
1974 output to :data:`sys.stderr` using format
1975 ``'[%(levelname)s/%(processName)s] %(message)s'``.
1976
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001977Below is an example session with logging turned on::
1978
Georg Brandl19cc9442008-10-16 21:36:39 +00001979 >>> import multiprocessing, logging
Jesse Nollerb5a4b0a2009-01-25 03:36:13 +00001980 >>> logger = multiprocessing.log_to_stderr()
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001981 >>> logger.setLevel(logging.INFO)
1982 >>> logger.warning('doomed')
1983 [WARNING/MainProcess] doomed
Georg Brandl19cc9442008-10-16 21:36:39 +00001984 >>> m = multiprocessing.Manager()
R. David Murray636b23a2009-04-28 16:08:18 +00001985 [INFO/SyncManager-...] child process calling self.run()
1986 [INFO/SyncManager-...] created temp directory /.../pymp-...
1987 [INFO/SyncManager-...] manager serving at '/.../listener-...'
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001988 >>> del m
1989 [INFO/MainProcess] sending shutdown message to manager
R. David Murray636b23a2009-04-28 16:08:18 +00001990 [INFO/SyncManager-...] manager exiting with exitcode 0
Benjamin Peterson190d56e2008-06-11 02:40:25 +00001991
Jesse Nollerb5a4b0a2009-01-25 03:36:13 +00001992In addition to having these two logging functions, the multiprocessing also
1993exposes two additional logging level attributes. These are :const:`SUBWARNING`
1994and :const:`SUBDEBUG`. The table below illustrates where theses fit in the
1995normal level hierarchy.
1996
1997+----------------+----------------+
1998| Level | Numeric value |
1999+================+================+
2000| ``SUBWARNING`` | 25 |
2001+----------------+----------------+
2002| ``SUBDEBUG`` | 5 |
2003+----------------+----------------+
2004
2005For a full table of logging levels, see the :mod:`logging` module.
2006
2007These additional logging levels are used primarily for certain debug messages
2008within the multiprocessing module. Below is the same example as above, except
2009with :const:`SUBDEBUG` enabled::
2010
2011 >>> import multiprocessing, logging
2012 >>> logger = multiprocessing.log_to_stderr()
2013 >>> logger.setLevel(multiprocessing.SUBDEBUG)
2014 >>> logger.warning('doomed')
2015 [WARNING/MainProcess] doomed
2016 >>> m = multiprocessing.Manager()
R. David Murray636b23a2009-04-28 16:08:18 +00002017 [INFO/SyncManager-...] child process calling self.run()
2018 [INFO/SyncManager-...] created temp directory /.../pymp-...
2019 [INFO/SyncManager-...] manager serving at '/.../pymp-djGBXN/listener-...'
Jesse Nollerb5a4b0a2009-01-25 03:36:13 +00002020 >>> del m
2021 [SUBDEBUG/MainProcess] finalizer calling ...
2022 [INFO/MainProcess] sending shutdown message to manager
R. David Murray636b23a2009-04-28 16:08:18 +00002023 [DEBUG/SyncManager-...] manager received shutdown message
2024 [SUBDEBUG/SyncManager-...] calling <Finalize object, callback=unlink, ...
2025 [SUBDEBUG/SyncManager-...] finalizer calling <built-in function unlink> ...
2026 [SUBDEBUG/SyncManager-...] calling <Finalize object, dead>
2027 [SUBDEBUG/SyncManager-...] finalizer calling <function rmtree at 0x5aa730> ...
2028 [INFO/SyncManager-...] manager exiting with exitcode 0
Benjamin Peterson190d56e2008-06-11 02:40:25 +00002029
2030The :mod:`multiprocessing.dummy` module
2031~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2032
2033.. module:: multiprocessing.dummy
2034 :synopsis: Dumb wrapper around threading.
2035
2036:mod:`multiprocessing.dummy` replicates the API of :mod:`multiprocessing` but is
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00002037no more than a wrapper around the :mod:`threading` module.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00002038
2039
2040.. _multiprocessing-programming:
2041
2042Programming guidelines
2043----------------------
2044
2045There are certain guidelines and idioms which should be adhered to when using
2046:mod:`multiprocessing`.
2047
2048
2049All platforms
2050~~~~~~~~~~~~~
2051
2052Avoid shared state
2053
2054 As far as possible one should try to avoid shifting large amounts of data
2055 between processes.
2056
2057 It is probably best to stick to using queues or pipes for communication
2058 between processes rather than using the lower level synchronization
2059 primitives from the :mod:`threading` module.
2060
2061Picklability
2062
2063 Ensure that the arguments to the methods of proxies are picklable.
2064
2065Thread safety of proxies
2066
2067 Do not use a proxy object from more than one thread unless you protect it
2068 with a lock.
2069
2070 (There is never a problem with different processes using the *same* proxy.)
2071
2072Joining zombie processes
2073
2074 On Unix when a process finishes but has not been joined it becomes a zombie.
2075 There should never be very many because each time a new process starts (or
2076 :func:`active_children` is called) all completed processes which have not
2077 yet been joined will be joined. Also calling a finished process's
2078 :meth:`Process.is_alive` will join the process. Even so it is probably good
2079 practice to explicitly join all the processes that you start.
2080
2081Better to inherit than pickle/unpickle
2082
Andrew M. Kuchlingbe504f12008-06-19 19:48:42 +00002083 On Windows many types from :mod:`multiprocessing` need to be picklable so
Benjamin Peterson190d56e2008-06-11 02:40:25 +00002084 that child processes can use them. However, one should generally avoid
2085 sending shared objects to other processes using pipes or queues. Instead
Eli Bendersky4b76f8a2011-12-31 07:05:12 +02002086 you should arrange the program so that a process which needs access to a
Benjamin Peterson190d56e2008-06-11 02:40:25 +00002087 shared resource created elsewhere can inherit it from an ancestor process.
2088
2089Avoid terminating processes
2090
2091 Using the :meth:`Process.terminate` method to stop a process is liable to
2092 cause any shared resources (such as locks, semaphores, pipes and queues)
2093 currently being used by the process to become broken or unavailable to other
2094 processes.
2095
2096 Therefore it is probably best to only consider using
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00002097 :meth:`Process.terminate` on processes which never use any shared resources.
Benjamin Peterson190d56e2008-06-11 02:40:25 +00002098
2099Joining processes that use queues
2100
2101 Bear in mind that a process that has put items in a queue will wait before
2102 terminating until all the buffered items are fed by the "feeder" thread to
2103 the underlying pipe. (The child process can call the
Sandro Tosi8b48c662012-02-25 19:35:16 +01002104 :meth:`~multiprocessing.Queue.cancel_join_thread` method of the queue to avoid this behaviour.)
Benjamin Peterson190d56e2008-06-11 02:40:25 +00002105
2106 This means that whenever you use a queue you need to make sure that all
2107 items which have been put on the queue will eventually be removed before the
2108 process is joined. Otherwise you cannot be sure that processes which have
2109 put items on the queue will terminate. Remember also that non-daemonic
2110 processes will be automatically be joined.
2111
2112 An example which will deadlock is the following::
2113
2114 from multiprocessing import Process, Queue
2115
2116 def f(q):
2117 q.put('X' * 1000000)
2118
2119 if __name__ == '__main__':
2120 queue = Queue()
2121 p = Process(target=f, args=(queue,))
2122 p.start()
2123 p.join() # this deadlocks
2124 obj = queue.get()
2125
2126 A fix here would be to swap the last two lines round (or simply remove the
2127 ``p.join()`` line).
2128
Andrew M. Kuchlingbe504f12008-06-19 19:48:42 +00002129Explicitly pass resources to child processes
Benjamin Peterson190d56e2008-06-11 02:40:25 +00002130
2131 On Unix a child process can make use of a shared resource created in a
2132 parent process using a global resource. However, it is better to pass the
2133 object as an argument to the constructor for the child process.
2134
2135 Apart from making the code (potentially) compatible with Windows this also
2136 ensures that as long as the child process is still alive the object will not
2137 be garbage collected in the parent process. This might be important if some
2138 resource is freed when the object is garbage collected in the parent
2139 process.
2140
2141 So for instance ::
2142
2143 from multiprocessing import Process, Lock
2144
2145 def f():
2146 ... do something using "lock" ...
2147
2148 if __name__ == '__main__':
2149 lock = Lock()
2150 for i in range(10):
2151 Process(target=f).start()
2152
2153 should be rewritten as ::
2154
2155 from multiprocessing import Process, Lock
2156
2157 def f(l):
2158 ... do something using "l" ...
2159
2160 if __name__ == '__main__':
2161 lock = Lock()
2162 for i in range(10):
2163 Process(target=f, args=(lock,)).start()
2164
Eli Bendersky4b76f8a2011-12-31 07:05:12 +02002165Beware of replacing :data:`sys.stdin` with a "file like object"
Jesse Noller1b90efb2009-06-30 17:11:52 +00002166
2167 :mod:`multiprocessing` originally unconditionally called::
2168
2169 os.close(sys.stdin.fileno())
2170
R. David Murray321afa82009-07-01 02:49:10 +00002171 in the :meth:`multiprocessing.Process._bootstrap` method --- this resulted
Jesse Noller1b90efb2009-06-30 17:11:52 +00002172 in issues with processes-in-processes. This has been changed to::
2173
2174 sys.stdin.close()
2175 sys.stdin = open(os.devnull)
2176
2177 Which solves the fundamental issue of processes colliding with each other
2178 resulting in a bad file descriptor error, but introduces a potential danger
2179 to applications which replace :func:`sys.stdin` with a "file-like object"
R. David Murray321afa82009-07-01 02:49:10 +00002180 with output buffering. This danger is that if multiple processes call
Jesse Noller1b90efb2009-06-30 17:11:52 +00002181 :func:`close()` on this file-like object, it could result in the same
2182 data being flushed to the object multiple times, resulting in corruption.
2183
2184 If you write a file-like object and implement your own caching, you can
2185 make it fork-safe by storing the pid whenever you append to the cache,
2186 and discarding the cache when the pid changes. For example::
2187
2188 @property
2189 def cache(self):
2190 pid = os.getpid()
2191 if pid != self._pid:
2192 self._pid = pid
2193 self._cache = []
2194 return self._cache
2195
2196 For more information, see :issue:`5155`, :issue:`5313` and :issue:`5331`
Benjamin Peterson190d56e2008-06-11 02:40:25 +00002197
2198Windows
2199~~~~~~~
2200
2201Since Windows lacks :func:`os.fork` it has a few extra restrictions:
2202
2203More picklability
2204
2205 Ensure that all arguments to :meth:`Process.__init__` are picklable. This
2206 means, in particular, that bound or unbound methods cannot be used directly
2207 as the ``target`` argument on Windows --- just define a function and use
2208 that instead.
2209
2210 Also, if you subclass :class:`Process` then make sure that instances will be
2211 picklable when the :meth:`Process.start` method is called.
2212
2213Global variables
2214
2215 Bear in mind that if code run in a child process tries to access a global
2216 variable, then the value it sees (if any) may not be the same as the value
2217 in the parent process at the time that :meth:`Process.start` was called.
2218
2219 However, global variables which are just module level constants cause no
2220 problems.
2221
2222Safe importing of main module
2223
2224 Make sure that the main module can be safely imported by a new Python
2225 interpreter without causing unintended side effects (such a starting a new
2226 process).
2227
2228 For example, under Windows running the following module would fail with a
2229 :exc:`RuntimeError`::
2230
2231 from multiprocessing import Process
2232
2233 def foo():
2234 print 'hello'
2235
2236 p = Process(target=foo)
2237 p.start()
2238
2239 Instead one should protect the "entry point" of the program by using ``if
2240 __name__ == '__main__':`` as follows::
2241
2242 from multiprocessing import Process, freeze_support
2243
2244 def foo():
2245 print 'hello'
2246
2247 if __name__ == '__main__':
2248 freeze_support()
2249 p = Process(target=foo)
2250 p.start()
2251
Benjamin Peterson910c2ab2008-06-27 23:22:06 +00002252 (The ``freeze_support()`` line can be omitted if the program will be run
Benjamin Peterson190d56e2008-06-11 02:40:25 +00002253 normally instead of frozen.)
2254
2255 This allows the newly spawned Python interpreter to safely import the module
2256 and then run the module's ``foo()`` function.
2257
2258 Similar restrictions apply if a pool or manager is created in the main
2259 module.
2260
2261
2262.. _multiprocessing-examples:
2263
2264Examples
2265--------
2266
2267Demonstration of how to create and use customized managers and proxies:
2268
2269.. literalinclude:: ../includes/mp_newtype.py
2270
2271
2272Using :class:`Pool`:
2273
2274.. literalinclude:: ../includes/mp_pool.py
2275
2276
2277Synchronization types like locks, conditions and queues:
2278
2279.. literalinclude:: ../includes/mp_synchronize.py
2280
2281
Georg Brandl21946af2010-10-06 09:28:45 +00002282An example showing how to use queues to feed tasks to a collection of worker
Eli Bendersky4b76f8a2011-12-31 07:05:12 +02002283processes and collect the results:
Benjamin Peterson190d56e2008-06-11 02:40:25 +00002284
2285.. literalinclude:: ../includes/mp_workers.py
2286
2287
2288An example of how a pool of worker processes can each run a
2289:class:`SimpleHTTPServer.HttpServer` instance while sharing a single listening
2290socket.
2291
2292.. literalinclude:: ../includes/mp_webserver.py
2293
2294
2295Some simple benchmarks comparing :mod:`multiprocessing` with :mod:`threading`:
2296
2297.. literalinclude:: ../includes/mp_benchmarks.py
2298