blob: 96d1424126caed83eecb8ee0948e7371796621d4 [file] [log] [blame]
Antoine Pitrou64a467d2010-12-12 20:34:49 +00001:mod:`multiprocessing` --- Process-based parallelism
2====================================================
Benjamin Petersone711caf2008-06-11 16:44:04 +00003
4.. module:: multiprocessing
Antoine Pitrou64a467d2010-12-12 20:34:49 +00005 :synopsis: Process-based parallelism.
Benjamin Petersone711caf2008-06-11 16:44:04 +00006
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04007**Source code:** :source:`Lib/multiprocessing/`
8
9--------------
Benjamin Petersone711caf2008-06-11 16:44:04 +000010
11Introduction
Georg Brandl49702152008-09-29 06:43:45 +000012------------
Benjamin Petersone711caf2008-06-11 16:44:04 +000013
Benjamin Peterson5289b2b2008-06-28 00:40:54 +000014:mod:`multiprocessing` is a package that supports spawning processes using an
15API similar to the :mod:`threading` module. The :mod:`multiprocessing` package
16offers both local and remote concurrency, effectively side-stepping the
17:term:`Global Interpreter Lock` by using subprocesses instead of threads. Due
18to this, the :mod:`multiprocessing` module allows the programmer to fully
19leverage multiple processors on a given machine. It runs on both Unix and
20Windows.
Benjamin Petersone711caf2008-06-11 16:44:04 +000021
Antoine Pitrou73dd0302015-01-11 15:05:29 +010022The :mod:`multiprocessing` module also introduces APIs which do not have
23analogs in the :mod:`threading` module. A prime example of this is the
24:class:`~multiprocessing.pool.Pool` object which offers a convenient means of
25parallelizing the execution of a function across multiple input values,
26distributing the input data across processes (data parallelism). The following
27example demonstrates the common practice of defining such functions in a module
28so that child processes can successfully import that module. This basic example
29of data parallelism using :class:`~multiprocessing.pool.Pool`, ::
Benjamin Petersone5384b02008-10-04 22:00:42 +000030
Antoine Pitrou73dd0302015-01-11 15:05:29 +010031 from multiprocessing import Pool
Benjamin Petersone711caf2008-06-11 16:44:04 +000032
Antoine Pitrou73dd0302015-01-11 15:05:29 +010033 def f(x):
34 return x*x
Jesse Noller45239682008-11-28 18:46:19 +000035
Antoine Pitrou73dd0302015-01-11 15:05:29 +010036 if __name__ == '__main__':
37 with Pool(5) as p:
38 print(p.map(f, [1, 2, 3]))
Jesse Noller45239682008-11-28 18:46:19 +000039
Antoine Pitrou73dd0302015-01-11 15:05:29 +010040will print to standard output ::
Jesse Noller45239682008-11-28 18:46:19 +000041
Antoine Pitrou73dd0302015-01-11 15:05:29 +010042 [1, 4, 9]
R. David Murray8e8099c2009-04-28 18:02:00 +000043
Jesse Noller45239682008-11-28 18:46:19 +000044
Benjamin Petersone711caf2008-06-11 16:44:04 +000045The :class:`Process` class
46~~~~~~~~~~~~~~~~~~~~~~~~~~
47
48In :mod:`multiprocessing`, processes are spawned by creating a :class:`Process`
Benjamin Peterson5289b2b2008-06-28 00:40:54 +000049object and then calling its :meth:`~Process.start` method. :class:`Process`
Benjamin Petersone711caf2008-06-11 16:44:04 +000050follows the API of :class:`threading.Thread`. A trivial example of a
51multiprocess program is ::
52
Georg Brandlb3959bd2010-04-08 06:33:16 +000053 from multiprocessing import Process
Benjamin Petersone711caf2008-06-11 16:44:04 +000054
55 def f(name):
Georg Brandl49702152008-09-29 06:43:45 +000056 print('hello', name)
Benjamin Petersone711caf2008-06-11 16:44:04 +000057
Georg Brandlb3959bd2010-04-08 06:33:16 +000058 if __name__ == '__main__':
59 p = Process(target=f, args=('bob',))
60 p.start()
61 p.join()
Benjamin Petersone711caf2008-06-11 16:44:04 +000062
Jesse Noller45239682008-11-28 18:46:19 +000063To show the individual process IDs involved, here is an expanded example::
64
65 from multiprocessing import Process
66 import os
67
68 def info(title):
Ezio Melotti985e24d2009-09-13 07:54:02 +000069 print(title)
70 print('module name:', __name__)
Berker Peksag44e4b112015-09-21 06:12:50 +030071 print('parent process:', os.getppid())
Ezio Melotti985e24d2009-09-13 07:54:02 +000072 print('process id:', os.getpid())
Georg Brandl48310cd2009-01-03 21:18:54 +000073
Jesse Noller45239682008-11-28 18:46:19 +000074 def f(name):
75 info('function f')
Ezio Melotti985e24d2009-09-13 07:54:02 +000076 print('hello', name)
Georg Brandl48310cd2009-01-03 21:18:54 +000077
Jesse Noller45239682008-11-28 18:46:19 +000078 if __name__ == '__main__':
79 info('main line')
80 p = Process(target=f, args=('bob',))
81 p.start()
82 p.join()
Benjamin Petersone711caf2008-06-11 16:44:04 +000083
Richard Oudkerk84ed9a62013-08-14 15:35:41 +010084For an explanation of why the ``if __name__ == '__main__'`` part is
Benjamin Petersone711caf2008-06-11 16:44:04 +000085necessary, see :ref:`multiprocessing-programming`.
86
87
88
Richard Oudkerkb1694cf2013-10-16 16:41:56 +010089Contexts and start methods
90~~~~~~~~~~~~~~~~~~~~~~~~~~
Richard Oudkerk84ed9a62013-08-14 15:35:41 +010091
R David Murrayac186222013-12-20 17:23:57 -050092.. _multiprocessing-start-methods:
93
Richard Oudkerk84ed9a62013-08-14 15:35:41 +010094Depending on the platform, :mod:`multiprocessing` supports three ways
95to start a process. These *start methods* are
96
97 *spawn*
98 The parent process starts a fresh python interpreter process. The
99 child process will only inherit those resources necessary to run
100 the process objects :meth:`~Process.run` method. In particular,
101 unnecessary file descriptors and handles from the parent process
102 will not be inherited. Starting a process using this method is
103 rather slow compared to using *fork* or *forkserver*.
104
105 Available on Unix and Windows. The default on Windows.
106
107 *fork*
108 The parent process uses :func:`os.fork` to fork the Python
109 interpreter. The child process, when it begins, is effectively
110 identical to the parent process. All resources of the parent are
111 inherited by the child process. Note that safely forking a
112 multithreaded process is problematic.
113
114 Available on Unix only. The default on Unix.
115
116 *forkserver*
117 When the program starts and selects the *forkserver* start method,
118 a server process is started. From then on, whenever a new process
Georg Brandl213ef6e2013-10-09 15:51:57 +0200119 is needed, the parent process connects to the server and requests
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100120 that it fork a new process. The fork server process is single
121 threaded so it is safe for it to use :func:`os.fork`. No
122 unnecessary resources are inherited.
123
124 Available on Unix platforms which support passing file descriptors
Richard Oudkerkb1694cf2013-10-16 16:41:56 +0100125 over Unix pipes.
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100126
Larry Hastings3732ed22014-03-15 21:13:56 -0700127.. versionchanged:: 3.4
128 *spawn* added on all unix platforms, and *forkserver* added for
Georg Brandldf48b972014-03-24 09:06:18 +0100129 some unix platforms.
Larry Hastings3732ed22014-03-15 21:13:56 -0700130 Child processes no longer inherit all of the parents inheritable
Georg Brandldf48b972014-03-24 09:06:18 +0100131 handles on Windows.
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100132
133On Unix using the *spawn* or *forkserver* start methods will also
134start a *semaphore tracker* process which tracks the unlinked named
135semaphores created by processes of the program. When all processes
136have exited the semaphore tracker unlinks any remaining semaphores.
137Usually there should be none, but if a process was killed by a signal
138there may some "leaked" semaphores. (Unlinking the named semaphores
139is a serious matter since the system allows only a limited number, and
140they will not be automatically unlinked until the next reboot.)
141
R David Murrayac186222013-12-20 17:23:57 -0500142To select a start method you use the :func:`set_start_method` in
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100143the ``if __name__ == '__main__'`` clause of the main module. For
144example::
145
146 import multiprocessing as mp
147
Richard Oudkerkb1694cf2013-10-16 16:41:56 +0100148 def foo(q):
149 q.put('hello')
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100150
151 if __name__ == '__main__':
152 mp.set_start_method('spawn')
Richard Oudkerkb1694cf2013-10-16 16:41:56 +0100153 q = mp.Queue()
154 p = mp.Process(target=foo, args=(q,))
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100155 p.start()
Richard Oudkerkb1694cf2013-10-16 16:41:56 +0100156 print(q.get())
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100157 p.join()
158
159:func:`set_start_method` should not be used more than once in the
160program.
161
Richard Oudkerkb1694cf2013-10-16 16:41:56 +0100162Alternatively, you can use :func:`get_context` to obtain a context
163object. Context objects have the same API as the multiprocessing
164module, and allow one to use multiple start methods in the same
165program. ::
166
167 import multiprocessing as mp
168
169 def foo(q):
170 q.put('hello')
171
172 if __name__ == '__main__':
173 ctx = mp.get_context('spawn')
174 q = ctx.Queue()
175 p = ctx.Process(target=foo, args=(q,))
176 p.start()
177 print(q.get())
178 p.join()
179
180Note that objects related to one context may not be compatible with
181processes for a different context. In particular, locks created using
182the *fork* context cannot be passed to a processes started using the
183*spawn* or *forkserver* start methods.
184
185A library which wants to use a particular start method should probably
186use :func:`get_context` to avoid interfering with the choice of the
187library user.
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100188
189
Benjamin Petersone711caf2008-06-11 16:44:04 +0000190Exchanging objects between processes
191~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
192
193:mod:`multiprocessing` supports two types of communication channel between
194processes:
195
196**Queues**
197
Benjamin Peterson257060a2008-06-28 01:42:41 +0000198 The :class:`Queue` class is a near clone of :class:`queue.Queue`. For
Benjamin Petersone711caf2008-06-11 16:44:04 +0000199 example::
200
201 from multiprocessing import Process, Queue
202
203 def f(q):
204 q.put([42, None, 'hello'])
205
Georg Brandl1f01deb2009-01-03 22:47:39 +0000206 if __name__ == '__main__':
207 q = Queue()
208 p = Process(target=f, args=(q,))
209 p.start()
210 print(q.get()) # prints "[42, None, 'hello']"
211 p.join()
Benjamin Petersone711caf2008-06-11 16:44:04 +0000212
Antoine Pitroufc6accc2012-05-18 13:57:04 +0200213 Queues are thread and process safe.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000214
215**Pipes**
216
217 The :func:`Pipe` function returns a pair of connection objects connected by a
218 pipe which by default is duplex (two-way). For example::
219
220 from multiprocessing import Process, Pipe
221
222 def f(conn):
223 conn.send([42, None, 'hello'])
224 conn.close()
225
226 if __name__ == '__main__':
227 parent_conn, child_conn = Pipe()
228 p = Process(target=f, args=(child_conn,))
229 p.start()
Georg Brandl49702152008-09-29 06:43:45 +0000230 print(parent_conn.recv()) # prints "[42, None, 'hello']"
Benjamin Petersone711caf2008-06-11 16:44:04 +0000231 p.join()
232
233 The two connection objects returned by :func:`Pipe` represent the two ends of
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000234 the pipe. Each connection object has :meth:`~Connection.send` and
235 :meth:`~Connection.recv` methods (among others). Note that data in a pipe
236 may become corrupted if two processes (or threads) try to read from or write
237 to the *same* end of the pipe at the same time. Of course there is no risk
238 of corruption from processes using different ends of the pipe at the same
239 time.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000240
241
242Synchronization between processes
243~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
244
245:mod:`multiprocessing` contains equivalents of all the synchronization
246primitives from :mod:`threading`. For instance one can use a lock to ensure
247that only one process prints to standard output at a time::
248
249 from multiprocessing import Process, Lock
250
251 def f(l, i):
252 l.acquire()
Andrew Svetlovee750d82014-07-02 07:21:03 +0300253 try:
254 print('hello world', i)
255 finally:
256 l.release()
Benjamin Petersone711caf2008-06-11 16:44:04 +0000257
258 if __name__ == '__main__':
259 lock = Lock()
260
261 for num in range(10):
262 Process(target=f, args=(lock, num)).start()
263
264Without using the lock output from the different processes is liable to get all
265mixed up.
266
267
268Sharing state between processes
269~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
270
271As mentioned above, when doing concurrent programming it is usually best to
272avoid using shared state as far as possible. This is particularly true when
273using multiple processes.
274
275However, if you really do need to use some shared data then
276:mod:`multiprocessing` provides a couple of ways of doing so.
277
278**Shared memory**
279
280 Data can be stored in a shared memory map using :class:`Value` or
281 :class:`Array`. For example, the following code ::
282
283 from multiprocessing import Process, Value, Array
284
285 def f(n, a):
286 n.value = 3.1415927
287 for i in range(len(a)):
288 a[i] = -a[i]
289
290 if __name__ == '__main__':
291 num = Value('d', 0.0)
292 arr = Array('i', range(10))
293
294 p = Process(target=f, args=(num, arr))
295 p.start()
296 p.join()
297
Georg Brandl49702152008-09-29 06:43:45 +0000298 print(num.value)
299 print(arr[:])
Benjamin Petersone711caf2008-06-11 16:44:04 +0000300
301 will print ::
302
303 3.1415927
304 [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
305
306 The ``'d'`` and ``'i'`` arguments used when creating ``num`` and ``arr`` are
307 typecodes of the kind used by the :mod:`array` module: ``'d'`` indicates a
Georg Brandl2ee470f2008-07-16 12:55:28 +0000308 double precision float and ``'i'`` indicates a signed integer. These shared
Georg Brandlf285bcc2010-10-19 21:07:16 +0000309 objects will be process and thread-safe.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000310
311 For more flexibility in using shared memory one can use the
312 :mod:`multiprocessing.sharedctypes` module which supports the creation of
313 arbitrary ctypes objects allocated from shared memory.
314
315**Server process**
316
317 A manager object returned by :func:`Manager` controls a server process which
Georg Brandl2ee470f2008-07-16 12:55:28 +0000318 holds Python objects and allows other processes to manipulate them using
Benjamin Petersone711caf2008-06-11 16:44:04 +0000319 proxies.
320
Richard Oudkerk3730a172012-06-15 18:26:07 +0100321 A manager returned by :func:`Manager` will support types
Senthil Kumaran6a0514e2016-01-20 03:10:13 -0800322 :class:`list`, :class:`dict`, :class:`~managers.Namespace`, :class:`Lock`,
Richard Oudkerk3730a172012-06-15 18:26:07 +0100323 :class:`RLock`, :class:`Semaphore`, :class:`BoundedSemaphore`,
324 :class:`Condition`, :class:`Event`, :class:`Barrier`,
325 :class:`Queue`, :class:`Value` and :class:`Array`. For example, ::
Benjamin Petersone711caf2008-06-11 16:44:04 +0000326
327 from multiprocessing import Process, Manager
328
329 def f(d, l):
330 d[1] = '1'
331 d['2'] = 2
332 d[0.25] = None
333 l.reverse()
334
335 if __name__ == '__main__':
Richard Oudkerk633c4d92012-06-18 21:29:36 +0100336 with Manager() as manager:
337 d = manager.dict()
338 l = manager.list(range(10))
Benjamin Petersone711caf2008-06-11 16:44:04 +0000339
Richard Oudkerk633c4d92012-06-18 21:29:36 +0100340 p = Process(target=f, args=(d, l))
341 p.start()
342 p.join()
Benjamin Petersone711caf2008-06-11 16:44:04 +0000343
Richard Oudkerk633c4d92012-06-18 21:29:36 +0100344 print(d)
345 print(l)
Benjamin Petersone711caf2008-06-11 16:44:04 +0000346
347 will print ::
348
349 {0.25: None, 1: '1', '2': 2}
350 [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
351
352 Server process managers are more flexible than using shared memory objects
353 because they can be made to support arbitrary object types. Also, a single
354 manager can be shared by processes on different computers over a network.
355 They are, however, slower than using shared memory.
356
357
358Using a pool of workers
359~~~~~~~~~~~~~~~~~~~~~~~
360
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000361The :class:`~multiprocessing.pool.Pool` class represents a pool of worker
Benjamin Petersone711caf2008-06-11 16:44:04 +0000362processes. It has methods which allows tasks to be offloaded to the worker
363processes in a few different ways.
364
365For example::
366
Berker Peksag7405c162016-01-21 23:59:49 +0200367 from multiprocessing import Pool, TimeoutError
368 import time
369 import os
Benjamin Petersone711caf2008-06-11 16:44:04 +0000370
371 def f(x):
372 return x*x
373
374 if __name__ == '__main__':
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100375 # start 4 worker processes
376 with Pool(processes=4) as pool:
377
378 # print "[0, 1, 4,..., 81]"
379 print(pool.map(f, range(10)))
380
381 # print same numbers in arbitrary order
382 for i in pool.imap_unordered(f, range(10)):
383 print(i)
384
Berker Peksag7405c162016-01-21 23:59:49 +0200385 # evaluate "f(20)" asynchronously
386 res = pool.apply_async(f, (20,)) # runs in *only* one process
387 print(res.get(timeout=1)) # prints "400"
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100388
Berker Peksag7405c162016-01-21 23:59:49 +0200389 # evaluate "os.getpid()" asynchronously
390 res = pool.apply_async(os.getpid, ()) # runs in *only* one process
391 print(res.get(timeout=1)) # prints the PID of that process
392
393 # launching multiple evaluations asynchronously *may* use more processes
394 multiple_results = [pool.apply_async(os.getpid, ()) for i in range(4)]
395 print([res.get(timeout=1) for res in multiple_results])
396
397 # make a single worker sleep for 10 secs
398 res = pool.apply_async(time.sleep, (10,))
399 try:
400 print(res.get(timeout=1))
401 except TimeoutError:
402 print("We lacked patience and got a multiprocessing.TimeoutError")
403
404 print("For the moment, the pool remains available for more work")
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100405
406 # exiting the 'with'-block has stopped the pool
Berker Peksag7405c162016-01-21 23:59:49 +0200407 print("Now the pool is closed and no longer available")
Benjamin Petersone711caf2008-06-11 16:44:04 +0000408
Richard Oudkerkb3c4b982013-07-02 12:32:00 +0100409Note that the methods of a pool should only ever be used by the
410process which created it.
411
Antoine Pitrou73dd0302015-01-11 15:05:29 +0100412.. note::
413
414 Functionality within this package requires that the ``__main__`` module be
415 importable by the children. This is covered in :ref:`multiprocessing-programming`
416 however it is worth pointing out here. This means that some examples, such
417 as the :class:`multiprocessing.pool.Pool` examples will not work in the
418 interactive interpreter. For example::
419
420 >>> from multiprocessing import Pool
421 >>> p = Pool(5)
422 >>> def f(x):
423 ... return x*x
424 ...
425 >>> p.map(f, [1,2,3])
426 Process PoolWorker-1:
427 Process PoolWorker-2:
428 Process PoolWorker-3:
429 Traceback (most recent call last):
430 Traceback (most recent call last):
431 Traceback (most recent call last):
432 AttributeError: 'module' object has no attribute 'f'
433 AttributeError: 'module' object has no attribute 'f'
434 AttributeError: 'module' object has no attribute 'f'
435
436 (If you try this it will actually output three full tracebacks
437 interleaved in a semi-random fashion, and then you may have to
438 stop the master process somehow.)
439
Benjamin Petersone711caf2008-06-11 16:44:04 +0000440
441Reference
442---------
443
444The :mod:`multiprocessing` package mostly replicates the API of the
445:mod:`threading` module.
446
447
448:class:`Process` and exceptions
449~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
450
Ezio Melotti8429b672012-09-14 06:35:09 +0300451.. class:: Process(group=None, target=None, name=None, args=(), kwargs={}, \
452 *, daemon=None)
Benjamin Petersone711caf2008-06-11 16:44:04 +0000453
454 Process objects represent activity that is run in a separate process. The
455 :class:`Process` class has equivalents of all the methods of
456 :class:`threading.Thread`.
457
458 The constructor should always be called with keyword arguments. *group*
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000459 should always be ``None``; it exists solely for compatibility with
Benjamin Petersona786b022008-08-25 21:05:21 +0000460 :class:`threading.Thread`. *target* is the callable object to be invoked by
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000461 the :meth:`run()` method. It defaults to ``None``, meaning nothing is
Eli Benderskyb674dcf2012-07-13 09:45:31 +0300462 called. *name* is the process name (see :attr:`name` for more details).
463 *args* is the argument tuple for the target invocation. *kwargs* is a
464 dictionary of keyword arguments for the target invocation. If provided,
465 the keyword-only *daemon* argument sets the process :attr:`daemon` flag
466 to ``True`` or ``False``. If ``None`` (the default), this flag will be
467 inherited from the creating process.
Antoine Pitrou0bd4deb2011-02-25 22:07:43 +0000468
469 By default, no arguments are passed to *target*.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000470
471 If a subclass overrides the constructor, it must make sure it invokes the
472 base class constructor (:meth:`Process.__init__`) before doing anything else
473 to the process.
474
Antoine Pitrou0bd4deb2011-02-25 22:07:43 +0000475 .. versionchanged:: 3.3
476 Added the *daemon* argument.
477
Benjamin Petersone711caf2008-06-11 16:44:04 +0000478 .. method:: run()
479
480 Method representing the process's activity.
481
482 You may override this method in a subclass. The standard :meth:`run`
483 method invokes the callable object passed to the object's constructor as
484 the target argument, if any, with sequential and keyword arguments taken
485 from the *args* and *kwargs* arguments, respectively.
486
487 .. method:: start()
488
489 Start the process's activity.
490
491 This must be called at most once per process object. It arranges for the
492 object's :meth:`run` method to be invoked in a separate process.
493
494 .. method:: join([timeout])
495
Charles-François Nataliacd9f7c2011-07-25 18:35:49 +0200496 If the optional argument *timeout* is ``None`` (the default), the method
497 blocks until the process whose :meth:`join` method is called terminates.
498 If *timeout* is a positive number, it blocks at most *timeout* seconds.
Berker Peksaga24d2d82016-09-26 23:22:22 +0300499 Note that the method returns ``None`` if its process terminates or if the
500 method times out. Check the process's :attr:`exitcode` to determine if
501 it terminated.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000502
503 A process can be joined many times.
504
505 A process cannot join itself because this would cause a deadlock. It is
506 an error to attempt to join a process before it has been started.
507
Benjamin Petersona786b022008-08-25 21:05:21 +0000508 .. attribute:: name
Benjamin Petersone711caf2008-06-11 16:44:04 +0000509
Eli Benderskyb674dcf2012-07-13 09:45:31 +0300510 The process's name. The name is a string used for identification purposes
511 only. It has no semantics. Multiple processes may be given the same
512 name.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000513
Eli Benderskyb674dcf2012-07-13 09:45:31 +0300514 The initial name is set by the constructor. If no explicit name is
515 provided to the constructor, a name of the form
516 'Process-N\ :sub:`1`:N\ :sub:`2`:...:N\ :sub:`k`' is constructed, where
517 each N\ :sub:`k` is the N-th child of its parent.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000518
Jesse Noller45239682008-11-28 18:46:19 +0000519 .. method:: is_alive
Benjamin Petersone711caf2008-06-11 16:44:04 +0000520
521 Return whether the process is alive.
522
523 Roughly, a process object is alive from the moment the :meth:`start`
524 method returns until the child process terminates.
525
Benjamin Petersona786b022008-08-25 21:05:21 +0000526 .. attribute:: daemon
Benjamin Petersone711caf2008-06-11 16:44:04 +0000527
Benjamin Petersonda10d3b2009-01-01 00:23:30 +0000528 The process's daemon flag, a Boolean value. This must be set before
Benjamin Petersona786b022008-08-25 21:05:21 +0000529 :meth:`start` is called.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000530
531 The initial value is inherited from the creating process.
532
533 When a process exits, it attempts to terminate all of its daemonic child
534 processes.
535
536 Note that a daemonic process is not allowed to create child processes.
537 Otherwise a daemonic process would leave its children orphaned if it gets
Alexandre Vassalotti260484d2009-07-17 11:43:26 +0000538 terminated when its parent process exits. Additionally, these are **not**
539 Unix daemons or services, they are normal processes that will be
Georg Brandl6faee4e2010-09-21 14:48:28 +0000540 terminated (and not joined) if non-daemonic processes have exited.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000541
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +0300542 In addition to the :class:`threading.Thread` API, :class:`Process` objects
Benjamin Petersona786b022008-08-25 21:05:21 +0000543 also support the following attributes and methods:
Benjamin Petersone711caf2008-06-11 16:44:04 +0000544
Benjamin Petersona786b022008-08-25 21:05:21 +0000545 .. attribute:: pid
Benjamin Petersone711caf2008-06-11 16:44:04 +0000546
547 Return the process ID. Before the process is spawned, this will be
548 ``None``.
549
Benjamin Petersona786b022008-08-25 21:05:21 +0000550 .. attribute:: exitcode
Benjamin Petersone711caf2008-06-11 16:44:04 +0000551
Benjamin Petersona786b022008-08-25 21:05:21 +0000552 The child's exit code. This will be ``None`` if the process has not yet
553 terminated. A negative value *-N* indicates that the child was terminated
554 by signal *N*.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000555
Benjamin Petersona786b022008-08-25 21:05:21 +0000556 .. attribute:: authkey
Benjamin Petersone711caf2008-06-11 16:44:04 +0000557
Benjamin Petersona786b022008-08-25 21:05:21 +0000558 The process's authentication key (a byte string).
Benjamin Petersone711caf2008-06-11 16:44:04 +0000559
560 When :mod:`multiprocessing` is initialized the main process is assigned a
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +0300561 random string using :func:`os.urandom`.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000562
563 When a :class:`Process` object is created, it will inherit the
Benjamin Petersona786b022008-08-25 21:05:21 +0000564 authentication key of its parent process, although this may be changed by
565 setting :attr:`authkey` to another byte string.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000566
567 See :ref:`multiprocessing-auth-keys`.
568
Antoine Pitrou176f07d2011-06-06 19:35:31 +0200569 .. attribute:: sentinel
570
571 A numeric handle of a system object which will become "ready" when
572 the process ends.
573
Antoine Pitroubdb1cf12012-03-05 19:28:37 +0100574 You can use this value if you want to wait on several events at
575 once using :func:`multiprocessing.connection.wait`. Otherwise
576 calling :meth:`join()` is simpler.
577
Antoine Pitrou176f07d2011-06-06 19:35:31 +0200578 On Windows, this is an OS handle usable with the ``WaitForSingleObject``
579 and ``WaitForMultipleObjects`` family of API calls. On Unix, this is
580 a file descriptor usable with primitives from the :mod:`select` module.
581
Antoine Pitrou176f07d2011-06-06 19:35:31 +0200582 .. versionadded:: 3.3
583
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000584 .. method:: terminate()
Benjamin Petersone711caf2008-06-11 16:44:04 +0000585
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000586 Terminate the process. On Unix this is done using the ``SIGTERM`` signal;
Georg Brandl60203b42010-10-06 10:11:56 +0000587 on Windows :c:func:`TerminateProcess` is used. Note that exit handlers and
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000588 finally clauses, etc., will not be executed.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000589
590 Note that descendant processes of the process will *not* be terminated --
591 they will simply become orphaned.
592
593 .. warning::
594
595 If this method is used when the associated process is using a pipe or
596 queue then the pipe or queue is liable to become corrupted and may
597 become unusable by other process. Similarly, if the process has
598 acquired a lock or semaphore etc. then terminating it is liable to
599 cause other processes to deadlock.
600
Ask Solemff7ffdd2010-11-09 21:52:33 +0000601 Note that the :meth:`start`, :meth:`join`, :meth:`is_alive`,
Richard Oudkerk64c25b42013-06-24 15:42:00 +0100602 :meth:`terminate` and :attr:`exitcode` methods should only be called by
Ask Solemff7ffdd2010-11-09 21:52:33 +0000603 the process that created the process object.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000604
R. David Murray8e8099c2009-04-28 18:02:00 +0000605 Example usage of some of the methods of :class:`Process`:
606
607 .. doctest::
Benjamin Petersone711caf2008-06-11 16:44:04 +0000608
Benjamin Peterson206e3072008-10-19 14:07:49 +0000609 >>> import multiprocessing, time, signal
610 >>> p = multiprocessing.Process(target=time.sleep, args=(1000,))
Georg Brandl49702152008-09-29 06:43:45 +0000611 >>> print(p, p.is_alive())
Benjamin Petersone711caf2008-06-11 16:44:04 +0000612 <Process(Process-1, initial)> False
613 >>> p.start()
Georg Brandl49702152008-09-29 06:43:45 +0000614 >>> print(p, p.is_alive())
Benjamin Petersone711caf2008-06-11 16:44:04 +0000615 <Process(Process-1, started)> True
616 >>> p.terminate()
R. David Murray8e8099c2009-04-28 18:02:00 +0000617 >>> time.sleep(0.1)
Georg Brandl49702152008-09-29 06:43:45 +0000618 >>> print(p, p.is_alive())
Benjamin Petersone711caf2008-06-11 16:44:04 +0000619 <Process(Process-1, stopped[SIGTERM])> False
Benjamin Petersona786b022008-08-25 21:05:21 +0000620 >>> p.exitcode == -signal.SIGTERM
Benjamin Petersone711caf2008-06-11 16:44:04 +0000621 True
622
Eli Benderskyb674dcf2012-07-13 09:45:31 +0300623.. exception:: ProcessError
624
625 The base class of all :mod:`multiprocessing` exceptions.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000626
627.. exception:: BufferTooShort
628
629 Exception raised by :meth:`Connection.recv_bytes_into()` when the supplied
630 buffer object is too small for the message read.
631
632 If ``e`` is an instance of :exc:`BufferTooShort` then ``e.args[0]`` will give
633 the message as a byte string.
634
Eli Benderskyb674dcf2012-07-13 09:45:31 +0300635.. exception:: AuthenticationError
636
637 Raised when there is an authentication error.
638
639.. exception:: TimeoutError
640
641 Raised by methods with a timeout when the timeout expires.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000642
643Pipes and Queues
644~~~~~~~~~~~~~~~~
645
646When using multiple processes, one generally uses message passing for
647communication between processes and avoids having to use any synchronization
648primitives like locks.
649
650For passing messages one can use :func:`Pipe` (for a connection between two
651processes) or a queue (which allows multiple producers and consumers).
652
Serhiy Storchaka4ecfa452016-05-16 09:31:54 +0300653The :class:`Queue`, :class:`SimpleQueue` and :class:`JoinableQueue` types
654are multi-producer, multi-consumer :abbr:`FIFO (first-in, first-out)`
655queues modelled on the :class:`queue.Queue` class in the
Benjamin Petersone711caf2008-06-11 16:44:04 +0000656standard library. They differ in that :class:`Queue` lacks the
Benjamin Peterson257060a2008-06-28 01:42:41 +0000657:meth:`~queue.Queue.task_done` and :meth:`~queue.Queue.join` methods introduced
658into Python 2.5's :class:`queue.Queue` class.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000659
660If you use :class:`JoinableQueue` then you **must** call
661:meth:`JoinableQueue.task_done` for each task removed from the queue or else the
Eli Benderskyd08effe2011-12-31 07:20:26 +0200662semaphore used to count the number of unfinished tasks may eventually overflow,
Benjamin Petersone711caf2008-06-11 16:44:04 +0000663raising an exception.
664
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000665Note that one can also create a shared queue by using a manager object -- see
666:ref:`multiprocessing-managers`.
667
Benjamin Petersone711caf2008-06-11 16:44:04 +0000668.. note::
669
Benjamin Peterson257060a2008-06-28 01:42:41 +0000670 :mod:`multiprocessing` uses the usual :exc:`queue.Empty` and
671 :exc:`queue.Full` exceptions to signal a timeout. They are not available in
Benjamin Petersone711caf2008-06-11 16:44:04 +0000672 the :mod:`multiprocessing` namespace so you need to import them from
Benjamin Peterson257060a2008-06-28 01:42:41 +0000673 :mod:`queue`.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000674
Richard Oudkerk95fe1a72013-06-24 14:48:07 +0100675.. note::
676
677 When an object is put on a queue, the object is pickled and a
678 background thread later flushes the pickled data to an underlying
679 pipe. This has some consequences which are a little surprising,
Richard Oudkerk7b69da72013-06-24 18:12:57 +0100680 but should not cause any practical difficulties -- if they really
681 bother you then you can instead use a queue created with a
682 :ref:`manager <multiprocessing-managers>`.
Richard Oudkerk95fe1a72013-06-24 14:48:07 +0100683
684 (1) After putting an object on an empty queue there may be an
Richard Oudkerk2b310dd2013-06-24 20:38:46 +0100685 infinitesimal delay before the queue's :meth:`~Queue.empty`
Richard Oudkerk95fe1a72013-06-24 14:48:07 +0100686 method returns :const:`False` and :meth:`~Queue.get_nowait` can
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +0300687 return without raising :exc:`queue.Empty`.
Richard Oudkerk95fe1a72013-06-24 14:48:07 +0100688
689 (2) If multiple processes are enqueuing objects, it is possible for
690 the objects to be received at the other end out-of-order.
691 However, objects enqueued by the same process will always be in
692 the expected order with respect to each other.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000693
694.. warning::
695
696 If a process is killed using :meth:`Process.terminate` or :func:`os.kill`
697 while it is trying to use a :class:`Queue`, then the data in the queue is
Eli Benderskyd08effe2011-12-31 07:20:26 +0200698 likely to become corrupted. This may cause any other process to get an
Benjamin Petersone711caf2008-06-11 16:44:04 +0000699 exception when it tries to use the queue later on.
700
701.. warning::
702
703 As mentioned above, if a child process has put items on a queue (and it has
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +0300704 not used :meth:`JoinableQueue.cancel_join_thread
705 <multiprocessing.Queue.cancel_join_thread>`), then that process will
Benjamin Petersone711caf2008-06-11 16:44:04 +0000706 not terminate until all buffered items have been flushed to the pipe.
707
708 This means that if you try joining that process you may get a deadlock unless
709 you are sure that all items which have been put on the queue have been
710 consumed. Similarly, if the child process is non-daemonic then the parent
Georg Brandl2ee470f2008-07-16 12:55:28 +0000711 process may hang on exit when it tries to join all its non-daemonic children.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000712
713 Note that a queue created using a manager does not have this issue. See
714 :ref:`multiprocessing-programming`.
715
Benjamin Petersone711caf2008-06-11 16:44:04 +0000716For an example of the usage of queues for interprocess communication see
717:ref:`multiprocessing-examples`.
718
719
720.. function:: Pipe([duplex])
721
722 Returns a pair ``(conn1, conn2)`` of :class:`Connection` objects representing
723 the ends of a pipe.
724
725 If *duplex* is ``True`` (the default) then the pipe is bidirectional. If
726 *duplex* is ``False`` then the pipe is unidirectional: ``conn1`` can only be
727 used for receiving messages and ``conn2`` can only be used for sending
728 messages.
729
730
731.. class:: Queue([maxsize])
732
733 Returns a process shared queue implemented using a pipe and a few
734 locks/semaphores. When a process first puts an item on the queue a feeder
735 thread is started which transfers objects from a buffer into the pipe.
736
Benjamin Peterson257060a2008-06-28 01:42:41 +0000737 The usual :exc:`queue.Empty` and :exc:`queue.Full` exceptions from the
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +0300738 standard library's :mod:`queue` module are raised to signal timeouts.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000739
Benjamin Peterson257060a2008-06-28 01:42:41 +0000740 :class:`Queue` implements all the methods of :class:`queue.Queue` except for
741 :meth:`~queue.Queue.task_done` and :meth:`~queue.Queue.join`.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000742
743 .. method:: qsize()
744
745 Return the approximate size of the queue. Because of
746 multithreading/multiprocessing semantics, this number is not reliable.
747
748 Note that this may raise :exc:`NotImplementedError` on Unix platforms like
Georg Brandlc575c902008-09-13 17:46:05 +0000749 Mac OS X where ``sem_getvalue()`` is not implemented.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000750
751 .. method:: empty()
752
753 Return ``True`` if the queue is empty, ``False`` otherwise. Because of
754 multithreading/multiprocessing semantics, this is not reliable.
755
756 .. method:: full()
757
758 Return ``True`` if the queue is full, ``False`` otherwise. Because of
759 multithreading/multiprocessing semantics, this is not reliable.
760
Senthil Kumarane969a212011-09-06 00:21:30 +0800761 .. method:: put(obj[, block[, timeout]])
Benjamin Petersone711caf2008-06-11 16:44:04 +0000762
Senthil Kumarane969a212011-09-06 00:21:30 +0800763 Put obj into the queue. If the optional argument *block* is ``True``
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000764 (the default) and *timeout* is ``None`` (the default), block if necessary until
Benjamin Petersone711caf2008-06-11 16:44:04 +0000765 a free slot is available. If *timeout* is a positive number, it blocks at
Benjamin Peterson257060a2008-06-28 01:42:41 +0000766 most *timeout* seconds and raises the :exc:`queue.Full` exception if no
Benjamin Petersone711caf2008-06-11 16:44:04 +0000767 free slot was available within that time. Otherwise (*block* is
768 ``False``), put an item on the queue if a free slot is immediately
Benjamin Peterson257060a2008-06-28 01:42:41 +0000769 available, else raise the :exc:`queue.Full` exception (*timeout* is
Benjamin Petersone711caf2008-06-11 16:44:04 +0000770 ignored in that case).
771
Senthil Kumarane969a212011-09-06 00:21:30 +0800772 .. method:: put_nowait(obj)
Benjamin Petersone711caf2008-06-11 16:44:04 +0000773
Senthil Kumarane969a212011-09-06 00:21:30 +0800774 Equivalent to ``put(obj, False)``.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000775
776 .. method:: get([block[, timeout]])
777
778 Remove and return an item from the queue. If optional args *block* is
779 ``True`` (the default) and *timeout* is ``None`` (the default), block if
780 necessary until an item is available. If *timeout* is a positive number,
Benjamin Peterson257060a2008-06-28 01:42:41 +0000781 it blocks at most *timeout* seconds and raises the :exc:`queue.Empty`
Benjamin Petersone711caf2008-06-11 16:44:04 +0000782 exception if no item was available within that time. Otherwise (block is
783 ``False``), return an item if one is immediately available, else raise the
Benjamin Peterson257060a2008-06-28 01:42:41 +0000784 :exc:`queue.Empty` exception (*timeout* is ignored in that case).
Benjamin Petersone711caf2008-06-11 16:44:04 +0000785
786 .. method:: get_nowait()
Benjamin Petersone711caf2008-06-11 16:44:04 +0000787
788 Equivalent to ``get(False)``.
789
790 :class:`multiprocessing.Queue` has a few additional methods not found in
Georg Brandl2ee470f2008-07-16 12:55:28 +0000791 :class:`queue.Queue`. These methods are usually unnecessary for most
792 code:
Benjamin Petersone711caf2008-06-11 16:44:04 +0000793
794 .. method:: close()
795
796 Indicate that no more data will be put on this queue by the current
797 process. The background thread will quit once it has flushed all buffered
798 data to the pipe. This is called automatically when the queue is garbage
799 collected.
800
801 .. method:: join_thread()
802
803 Join the background thread. This can only be used after :meth:`close` has
804 been called. It blocks until the background thread exits, ensuring that
805 all data in the buffer has been flushed to the pipe.
806
807 By default if a process is not the creator of the queue then on exit it
808 will attempt to join the queue's background thread. The process can call
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000809 :meth:`cancel_join_thread` to make :meth:`join_thread` do nothing.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000810
811 .. method:: cancel_join_thread()
812
813 Prevent :meth:`join_thread` from blocking. In particular, this prevents
814 the background thread from being joined automatically when the process
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000815 exits -- see :meth:`join_thread`.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000816
Richard Oudkerkd7d3f372013-07-02 12:59:55 +0100817 A better name for this method might be
818 ``allow_exit_without_flush()``. It is likely to cause enqueued
819 data to lost, and you almost certainly will not need to use it.
820 It is really only there if you need the current process to exit
821 immediately without waiting to flush enqueued data to the
822 underlying pipe, and you don't care about lost data.
823
Berker Peksag7ecfc822015-04-08 17:56:30 +0300824 .. note::
825
826 This class's functionality requires a functioning shared semaphore
827 implementation on the host operating system. Without one, the
828 functionality in this class will be disabled, and attempts to
829 instantiate a :class:`Queue` will result in an :exc:`ImportError`. See
830 :issue:`3770` for additional information. The same holds true for any
831 of the specialized queue types listed below.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000832
Sandro Tosicd778152012-02-15 23:27:00 +0100833.. class:: SimpleQueue()
Sandro Tosi5cb522c2012-02-15 23:14:21 +0100834
835 It is a simplified :class:`Queue` type, very close to a locked :class:`Pipe`.
836
837 .. method:: empty()
838
839 Return ``True`` if the queue is empty, ``False`` otherwise.
840
841 .. method:: get()
842
843 Remove and return an item from the queue.
844
845 .. method:: put(item)
846
847 Put *item* into the queue.
848
849
Benjamin Petersone711caf2008-06-11 16:44:04 +0000850.. class:: JoinableQueue([maxsize])
851
852 :class:`JoinableQueue`, a :class:`Queue` subclass, is a queue which
853 additionally has :meth:`task_done` and :meth:`join` methods.
854
855 .. method:: task_done()
856
Eli Bendersky78da3bc2012-07-13 10:10:05 +0300857 Indicate that a formerly enqueued task is complete. Used by queue
858 consumers. For each :meth:`~Queue.get` used to fetch a task, a subsequent
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000859 call to :meth:`task_done` tells the queue that the processing on the task
860 is complete.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000861
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +0300862 If a :meth:`~queue.Queue.join` is currently blocking, it will resume when all
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000863 items have been processed (meaning that a :meth:`task_done` call was
864 received for every item that had been :meth:`~Queue.put` into the queue).
Benjamin Petersone711caf2008-06-11 16:44:04 +0000865
866 Raises a :exc:`ValueError` if called more times than there were items
867 placed in the queue.
868
869
870 .. method:: join()
871
872 Block until all items in the queue have been gotten and processed.
873
874 The count of unfinished tasks goes up whenever an item is added to the
Eli Bendersky78da3bc2012-07-13 10:10:05 +0300875 queue. The count goes down whenever a consumer calls
Benjamin Petersone711caf2008-06-11 16:44:04 +0000876 :meth:`task_done` to indicate that the item was retrieved and all work on
877 it is complete. When the count of unfinished tasks drops to zero,
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +0300878 :meth:`~queue.Queue.join` unblocks.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000879
880
881Miscellaneous
882~~~~~~~~~~~~~
883
884.. function:: active_children()
885
886 Return list of all live children of the current process.
887
Zachary Ware72805612014-10-03 10:55:12 -0500888 Calling this has the side effect of "joining" any processes which have
Benjamin Petersone711caf2008-06-11 16:44:04 +0000889 already finished.
890
891.. function:: cpu_count()
892
Charles-François Natalidc87e4b2015-07-13 21:01:39 +0100893 Return the number of CPUs in the system.
894
895 This number is not equivalent to the number of CPUs the current process can
896 use. The number of usable CPUs can be obtained with
897 ``len(os.sched_getaffinity(0))``
898
899 May raise :exc:`NotImplementedError`.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000900
Charles-Francois Natali44feda32013-05-20 14:40:46 +0200901 .. seealso::
902 :func:`os.cpu_count`
903
Benjamin Petersone711caf2008-06-11 16:44:04 +0000904.. function:: current_process()
905
906 Return the :class:`Process` object corresponding to the current process.
907
908 An analogue of :func:`threading.current_thread`.
909
910.. function:: freeze_support()
911
912 Add support for when a program which uses :mod:`multiprocessing` has been
913 frozen to produce a Windows executable. (Has been tested with **py2exe**,
914 **PyInstaller** and **cx_Freeze**.)
915
916 One needs to call this function straight after the ``if __name__ ==
917 '__main__'`` line of the main module. For example::
918
919 from multiprocessing import Process, freeze_support
920
921 def f():
Georg Brandl49702152008-09-29 06:43:45 +0000922 print('hello world!')
Benjamin Petersone711caf2008-06-11 16:44:04 +0000923
924 if __name__ == '__main__':
925 freeze_support()
926 Process(target=f).start()
927
R. David Murray8e8099c2009-04-28 18:02:00 +0000928 If the ``freeze_support()`` line is omitted then trying to run the frozen
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000929 executable will raise :exc:`RuntimeError`.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000930
Berker Peksag94541f42016-01-07 18:45:22 +0200931 Calling ``freeze_support()`` has no effect when invoked on any operating
932 system other than Windows. In addition, if the module is being run
933 normally by the Python interpreter on Windows (the program has not been
934 frozen), then ``freeze_support()`` has no effect.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000935
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100936.. function:: get_all_start_methods()
937
938 Returns a list of the supported start methods, the first of which
939 is the default. The possible start methods are ``'fork'``,
940 ``'spawn'`` and ``'forkserver'``. On Windows only ``'spawn'`` is
941 available. On Unix ``'fork'`` and ``'spawn'`` are always
942 supported, with ``'fork'`` being the default.
943
944 .. versionadded:: 3.4
945
Richard Oudkerkb1694cf2013-10-16 16:41:56 +0100946.. function:: get_context(method=None)
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100947
Richard Oudkerkb1694cf2013-10-16 16:41:56 +0100948 Return a context object which has the same attributes as the
949 :mod:`multiprocessing` module.
950
Serhiy Storchakaecf41da2016-10-19 16:29:26 +0300951 If *method* is ``None`` then the default context is returned.
Richard Oudkerkb1694cf2013-10-16 16:41:56 +0100952 Otherwise *method* should be ``'fork'``, ``'spawn'``,
953 ``'forkserver'``. :exc:`ValueError` is raised if the specified
954 start method is not available.
955
956 .. versionadded:: 3.4
957
958.. function:: get_start_method(allow_none=False)
959
960 Return the name of start method used for starting processes.
961
962 If the start method has not been fixed and *allow_none* is false,
963 then the start method is fixed to the default and the name is
964 returned. If the start method has not been fixed and *allow_none*
Serhiy Storchakaecf41da2016-10-19 16:29:26 +0300965 is true then ``None`` is returned.
Richard Oudkerkb1694cf2013-10-16 16:41:56 +0100966
967 The return value can be ``'fork'``, ``'spawn'``, ``'forkserver'``
Serhiy Storchakaecf41da2016-10-19 16:29:26 +0300968 or ``None``. ``'fork'`` is the default on Unix, while ``'spawn'`` is
Richard Oudkerkb1694cf2013-10-16 16:41:56 +0100969 the default on Windows.
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100970
971 .. versionadded:: 3.4
972
Benjamin Petersone711caf2008-06-11 16:44:04 +0000973.. function:: set_executable()
974
Ezio Melotti0639d5a2009-12-19 23:26:38 +0000975 Sets the path of the Python interpreter to use when starting a child process.
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000976 (By default :data:`sys.executable` is used). Embedders will probably need to
977 do some thing like ::
Benjamin Petersone711caf2008-06-11 16:44:04 +0000978
Eli Benderskyd08effe2011-12-31 07:20:26 +0200979 set_executable(os.path.join(sys.exec_prefix, 'pythonw.exe'))
Benjamin Petersone711caf2008-06-11 16:44:04 +0000980
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100981 before they can create child processes.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000982
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100983 .. versionchanged:: 3.4
984 Now supported on Unix when the ``'spawn'`` start method is used.
985
986.. function:: set_start_method(method)
987
988 Set the method which should be used to start child processes.
989 *method* can be ``'fork'``, ``'spawn'`` or ``'forkserver'``.
990
991 Note that this should be called at most once, and it should be
992 protected inside the ``if __name__ == '__main__'`` clause of the
993 main module.
994
995 .. versionadded:: 3.4
Benjamin Petersone711caf2008-06-11 16:44:04 +0000996
997.. note::
998
999 :mod:`multiprocessing` contains no analogues of
1000 :func:`threading.active_count`, :func:`threading.enumerate`,
1001 :func:`threading.settrace`, :func:`threading.setprofile`,
1002 :class:`threading.Timer`, or :class:`threading.local`.
1003
1004
1005Connection Objects
1006~~~~~~~~~~~~~~~~~~
1007
1008Connection objects allow the sending and receiving of picklable objects or
1009strings. They can be thought of as message oriented connected sockets.
1010
Eli Benderskyd08effe2011-12-31 07:20:26 +02001011Connection objects are usually created using :func:`Pipe` -- see also
Benjamin Petersone711caf2008-06-11 16:44:04 +00001012:ref:`multiprocessing-listeners-clients`.
1013
1014.. class:: Connection
1015
1016 .. method:: send(obj)
1017
1018 Send an object to the other end of the connection which should be read
1019 using :meth:`recv`.
1020
Benjamin Peterson965ce872009-04-05 21:24:58 +00001021 The object must be picklable. Very large pickles (approximately 32 MB+,
Berker Peksag00eaa8a2016-06-12 12:25:43 +03001022 though it depends on the OS) may raise a :exc:`ValueError` exception.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001023
1024 .. method:: recv()
1025
1026 Return an object sent from the other end of the connection using
Sandro Tosib52e7a92012-01-07 17:56:58 +01001027 :meth:`send`. Blocks until there its something to receive. Raises
1028 :exc:`EOFError` if there is nothing left to receive
Benjamin Petersone711caf2008-06-11 16:44:04 +00001029 and the other end was closed.
1030
1031 .. method:: fileno()
1032
Eli Benderskyd08effe2011-12-31 07:20:26 +02001033 Return the file descriptor or handle used by the connection.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001034
1035 .. method:: close()
1036
1037 Close the connection.
1038
1039 This is called automatically when the connection is garbage collected.
1040
1041 .. method:: poll([timeout])
1042
1043 Return whether there is any data available to be read.
1044
1045 If *timeout* is not specified then it will return immediately. If
1046 *timeout* is a number then this specifies the maximum time in seconds to
1047 block. If *timeout* is ``None`` then an infinite timeout is used.
1048
Antoine Pitroubdb1cf12012-03-05 19:28:37 +01001049 Note that multiple connection objects may be polled at once by
1050 using :func:`multiprocessing.connection.wait`.
1051
Benjamin Petersone711caf2008-06-11 16:44:04 +00001052 .. method:: send_bytes(buffer[, offset[, size]])
1053
Ezio Melottic228e962013-05-04 18:06:34 +03001054 Send byte data from a :term:`bytes-like object` as a complete message.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001055
1056 If *offset* is given then data is read from that position in *buffer*. If
Benjamin Peterson965ce872009-04-05 21:24:58 +00001057 *size* is given then that many bytes will be read from buffer. Very large
1058 buffers (approximately 32 MB+, though it depends on the OS) may raise a
Eli Benderskyd08effe2011-12-31 07:20:26 +02001059 :exc:`ValueError` exception
Benjamin Petersone711caf2008-06-11 16:44:04 +00001060
1061 .. method:: recv_bytes([maxlength])
1062
1063 Return a complete message of byte data sent from the other end of the
Sandro Tosib52e7a92012-01-07 17:56:58 +01001064 connection as a string. Blocks until there is something to receive.
1065 Raises :exc:`EOFError` if there is nothing left
Benjamin Petersone711caf2008-06-11 16:44:04 +00001066 to receive and the other end has closed.
1067
1068 If *maxlength* is specified and the message is longer than *maxlength*
Antoine Pitrou62ab10a02011-10-12 20:10:51 +02001069 then :exc:`OSError` is raised and the connection will no longer be
Benjamin Petersone711caf2008-06-11 16:44:04 +00001070 readable.
1071
Antoine Pitrou62ab10a02011-10-12 20:10:51 +02001072 .. versionchanged:: 3.3
Martin Panter7462b6492015-11-02 03:37:02 +00001073 This function used to raise :exc:`IOError`, which is now an
Antoine Pitrou62ab10a02011-10-12 20:10:51 +02001074 alias of :exc:`OSError`.
1075
1076
Benjamin Petersone711caf2008-06-11 16:44:04 +00001077 .. method:: recv_bytes_into(buffer[, offset])
1078
1079 Read into *buffer* a complete message of byte data sent from the other end
Sandro Tosib52e7a92012-01-07 17:56:58 +01001080 of the connection and return the number of bytes in the message. Blocks
1081 until there is something to receive. Raises
Benjamin Petersone711caf2008-06-11 16:44:04 +00001082 :exc:`EOFError` if there is nothing left to receive and the other end was
1083 closed.
1084
Ezio Melottic228e962013-05-04 18:06:34 +03001085 *buffer* must be a writable :term:`bytes-like object`. If
Benjamin Petersone711caf2008-06-11 16:44:04 +00001086 *offset* is given then the message will be written into the buffer from
R. David Murray8e8099c2009-04-28 18:02:00 +00001087 that position. Offset must be a non-negative integer less than the
1088 length of *buffer* (in bytes).
Benjamin Petersone711caf2008-06-11 16:44:04 +00001089
1090 If the buffer is too short then a :exc:`BufferTooShort` exception is
1091 raised and the complete message is available as ``e.args[0]`` where ``e``
1092 is the exception instance.
1093
Antoine Pitrou5438ed12012-04-24 22:56:57 +02001094 .. versionchanged:: 3.3
1095 Connection objects themselves can now be transferred between processes
1096 using :meth:`Connection.send` and :meth:`Connection.recv`.
1097
Richard Oudkerkd69cfe82012-06-18 17:47:52 +01001098 .. versionadded:: 3.3
Serhiy Storchaka14867992014-09-10 23:43:41 +03001099 Connection objects now support the context management protocol -- see
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03001100 :ref:`typecontextmanager`. :meth:`~contextmanager.__enter__` returns the
1101 connection object, and :meth:`~contextmanager.__exit__` calls :meth:`close`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001102
1103For example:
1104
R. David Murray8e8099c2009-04-28 18:02:00 +00001105.. doctest::
1106
Benjamin Petersone711caf2008-06-11 16:44:04 +00001107 >>> from multiprocessing import Pipe
1108 >>> a, b = Pipe()
1109 >>> a.send([1, 'hello', None])
1110 >>> b.recv()
1111 [1, 'hello', None]
Georg Brandl30176892010-10-29 05:22:17 +00001112 >>> b.send_bytes(b'thank you')
Benjamin Petersone711caf2008-06-11 16:44:04 +00001113 >>> a.recv_bytes()
Georg Brandl30176892010-10-29 05:22:17 +00001114 b'thank you'
Benjamin Petersone711caf2008-06-11 16:44:04 +00001115 >>> import array
1116 >>> arr1 = array.array('i', range(5))
1117 >>> arr2 = array.array('i', [0] * 10)
1118 >>> a.send_bytes(arr1)
1119 >>> count = b.recv_bytes_into(arr2)
1120 >>> assert count == len(arr1) * arr1.itemsize
1121 >>> arr2
1122 array('i', [0, 1, 2, 3, 4, 0, 0, 0, 0, 0])
1123
1124
1125.. warning::
1126
1127 The :meth:`Connection.recv` method automatically unpickles the data it
1128 receives, which can be a security risk unless you can trust the process
1129 which sent the message.
1130
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00001131 Therefore, unless the connection object was produced using :func:`Pipe` you
1132 should only use the :meth:`~Connection.recv` and :meth:`~Connection.send`
1133 methods after performing some sort of authentication. See
1134 :ref:`multiprocessing-auth-keys`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001135
1136.. warning::
1137
1138 If a process is killed while it is trying to read or write to a pipe then
1139 the data in the pipe is likely to become corrupted, because it may become
1140 impossible to be sure where the message boundaries lie.
1141
1142
1143Synchronization primitives
1144~~~~~~~~~~~~~~~~~~~~~~~~~~
1145
1146Generally synchronization primitives are not as necessary in a multiprocess
Georg Brandl2ee470f2008-07-16 12:55:28 +00001147program as they are in a multithreaded program. See the documentation for
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00001148:mod:`threading` module.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001149
1150Note that one can also create synchronization primitives by using a manager
1151object -- see :ref:`multiprocessing-managers`.
1152
Richard Oudkerk3730a172012-06-15 18:26:07 +01001153.. class:: Barrier(parties[, action[, timeout]])
1154
1155 A barrier object: a clone of :class:`threading.Barrier`.
1156
1157 .. versionadded:: 3.3
1158
Benjamin Petersone711caf2008-06-11 16:44:04 +00001159.. class:: BoundedSemaphore([value])
1160
Berker Peksag407c4972015-09-21 06:50:55 +03001161 A bounded semaphore object: a close analog of
1162 :class:`threading.BoundedSemaphore`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001163
Berker Peksag407c4972015-09-21 06:50:55 +03001164 A solitary difference from its close analog exists: its ``acquire`` method's
1165 first argument is named *block*, as is consistent with :meth:`Lock.acquire`.
1166
1167 .. note::
1168 On Mac OS X, this is indistinguishable from :class:`Semaphore` because
1169 ``sem_getvalue()`` is not implemented on that platform.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001170
1171.. class:: Condition([lock])
1172
R David Murrayef4d2862012-10-06 14:35:35 -04001173 A condition variable: an alias for :class:`threading.Condition`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001174
1175 If *lock* is specified then it should be a :class:`Lock` or :class:`RLock`
1176 object from :mod:`multiprocessing`.
1177
Charles-François Natalic8ce7152012-04-17 18:45:57 +02001178 .. versionchanged:: 3.3
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03001179 The :meth:`~threading.Condition.wait_for` method was added.
Charles-François Natalic8ce7152012-04-17 18:45:57 +02001180
Benjamin Petersone711caf2008-06-11 16:44:04 +00001181.. class:: Event()
1182
1183 A clone of :class:`threading.Event`.
1184
Berker Peksag407c4972015-09-21 06:50:55 +03001185
Benjamin Petersone711caf2008-06-11 16:44:04 +00001186.. class:: Lock()
1187
Berker Peksag407c4972015-09-21 06:50:55 +03001188 A non-recursive lock object: a close analog of :class:`threading.Lock`.
1189 Once a process or thread has acquired a lock, subsequent attempts to
1190 acquire it from any process or thread will block until it is released;
1191 any process or thread may release it. The concepts and behaviors of
1192 :class:`threading.Lock` as it applies to threads are replicated here in
1193 :class:`multiprocessing.Lock` as it applies to either processes or threads,
1194 except as noted.
1195
1196 Note that :class:`Lock` is actually a factory function which returns an
1197 instance of ``multiprocessing.synchronize.Lock`` initialized with a
1198 default context.
1199
1200 :class:`Lock` supports the :term:`context manager` protocol and thus may be
1201 used in :keyword:`with` statements.
1202
1203 .. method:: acquire(block=True, timeout=None)
1204
1205 Acquire a lock, blocking or non-blocking.
1206
1207 With the *block* argument set to ``True`` (the default), the method call
1208 will block until the lock is in an unlocked state, then set it to locked
1209 and return ``True``. Note that the name of this first argument differs
1210 from that in :meth:`threading.Lock.acquire`.
1211
1212 With the *block* argument set to ``False``, the method call does not
1213 block. If the lock is currently in a locked state, return ``False``;
1214 otherwise set the lock to a locked state and return ``True``.
1215
1216 When invoked with a positive, floating-point value for *timeout*, block
1217 for at most the number of seconds specified by *timeout* as long as
1218 the lock can not be acquired. Invocations with a negative value for
1219 *timeout* are equivalent to a *timeout* of zero. Invocations with a
1220 *timeout* value of ``None`` (the default) set the timeout period to
1221 infinite. Note that the treatment of negative or ``None`` values for
1222 *timeout* differs from the implemented behavior in
1223 :meth:`threading.Lock.acquire`. The *timeout* argument has no practical
1224 implications if the *block* argument is set to ``False`` and is thus
1225 ignored. Returns ``True`` if the lock has been acquired or ``False`` if
1226 the timeout period has elapsed.
1227
1228
1229 .. method:: release()
1230
1231 Release a lock. This can be called from any process or thread, not only
1232 the process or thread which originally acquired the lock.
1233
1234 Behavior is the same as in :meth:`threading.Lock.release` except that
1235 when invoked on an unlocked lock, a :exc:`ValueError` is raised.
1236
Benjamin Petersone711caf2008-06-11 16:44:04 +00001237
1238.. class:: RLock()
1239
Berker Peksag407c4972015-09-21 06:50:55 +03001240 A recursive lock object: a close analog of :class:`threading.RLock`. A
1241 recursive lock must be released by the process or thread that acquired it.
1242 Once a process or thread has acquired a recursive lock, the same process
1243 or thread may acquire it again without blocking; that process or thread
1244 must release it once for each time it has been acquired.
1245
1246 Note that :class:`RLock` is actually a factory function which returns an
1247 instance of ``multiprocessing.synchronize.RLock`` initialized with a
1248 default context.
1249
1250 :class:`RLock` supports the :term:`context manager` protocol and thus may be
1251 used in :keyword:`with` statements.
1252
1253
1254 .. method:: acquire(block=True, timeout=None)
1255
1256 Acquire a lock, blocking or non-blocking.
1257
1258 When invoked with the *block* argument set to ``True``, block until the
1259 lock is in an unlocked state (not owned by any process or thread) unless
1260 the lock is already owned by the current process or thread. The current
1261 process or thread then takes ownership of the lock (if it does not
1262 already have ownership) and the recursion level inside the lock increments
1263 by one, resulting in a return value of ``True``. Note that there are
1264 several differences in this first argument's behavior compared to the
1265 implementation of :meth:`threading.RLock.acquire`, starting with the name
1266 of the argument itself.
1267
1268 When invoked with the *block* argument set to ``False``, do not block.
1269 If the lock has already been acquired (and thus is owned) by another
1270 process or thread, the current process or thread does not take ownership
1271 and the recursion level within the lock is not changed, resulting in
1272 a return value of ``False``. If the lock is in an unlocked state, the
1273 current process or thread takes ownership and the recursion level is
1274 incremented, resulting in a return value of ``True``.
1275
1276 Use and behaviors of the *timeout* argument are the same as in
1277 :meth:`Lock.acquire`. Note that some of these behaviors of *timeout*
1278 differ from the implemented behaviors in :meth:`threading.RLock.acquire`.
1279
1280
1281 .. method:: release()
1282
1283 Release a lock, decrementing the recursion level. If after the
1284 decrement the recursion level is zero, reset the lock to unlocked (not
1285 owned by any process or thread) and if any other processes or threads
1286 are blocked waiting for the lock to become unlocked, allow exactly one
1287 of them to proceed. If after the decrement the recursion level is still
1288 nonzero, the lock remains locked and owned by the calling process or
1289 thread.
1290
1291 Only call this method when the calling process or thread owns the lock.
1292 An :exc:`AssertionError` is raised if this method is called by a process
1293 or thread other than the owner or if the lock is in an unlocked (unowned)
1294 state. Note that the type of exception raised in this situation
1295 differs from the implemented behavior in :meth:`threading.RLock.release`.
1296
Benjamin Petersone711caf2008-06-11 16:44:04 +00001297
1298.. class:: Semaphore([value])
1299
Berker Peksag407c4972015-09-21 06:50:55 +03001300 A semaphore object: a close analog of :class:`threading.Semaphore`.
1301
1302 A solitary difference from its close analog exists: its ``acquire`` method's
1303 first argument is named *block*, as is consistent with :meth:`Lock.acquire`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001304
1305.. note::
1306
Georg Brandl592296e2010-05-21 21:48:27 +00001307 On Mac OS X, ``sem_timedwait`` is unsupported, so calling ``acquire()`` with
1308 a timeout will emulate that function's behavior using a sleeping loop.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001309
1310.. note::
1311
Serhiy Storchaka0424eaf2015-09-12 17:45:25 +03001312 If the SIGINT signal generated by :kbd:`Ctrl-C` arrives while the main thread is
Benjamin Petersone711caf2008-06-11 16:44:04 +00001313 blocked by a call to :meth:`BoundedSemaphore.acquire`, :meth:`Lock.acquire`,
1314 :meth:`RLock.acquire`, :meth:`Semaphore.acquire`, :meth:`Condition.acquire`
1315 or :meth:`Condition.wait` then the call will be immediately interrupted and
1316 :exc:`KeyboardInterrupt` will be raised.
1317
1318 This differs from the behaviour of :mod:`threading` where SIGINT will be
1319 ignored while the equivalent blocking calls are in progress.
1320
Berker Peksag7ecfc822015-04-08 17:56:30 +03001321.. note::
1322
1323 Some of this package's functionality requires a functioning shared semaphore
1324 implementation on the host operating system. Without one, the
1325 :mod:`multiprocessing.synchronize` module will be disabled, and attempts to
1326 import it will result in an :exc:`ImportError`. See
1327 :issue:`3770` for additional information.
1328
Benjamin Petersone711caf2008-06-11 16:44:04 +00001329
1330Shared :mod:`ctypes` Objects
1331~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1332
1333It is possible to create shared objects using shared memory which can be
1334inherited by child processes.
1335
Richard Oudkerk87ea7802012-05-29 12:01:47 +01001336.. function:: Value(typecode_or_type, *args, lock=True)
Benjamin Petersone711caf2008-06-11 16:44:04 +00001337
1338 Return a :mod:`ctypes` object allocated from shared memory. By default the
Eli Bendersky78da3bc2012-07-13 10:10:05 +03001339 return value is actually a synchronized wrapper for the object. The object
1340 itself can be accessed via the *value* attribute of a :class:`Value`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001341
1342 *typecode_or_type* determines the type of the returned object: it is either a
1343 ctypes type or a one character typecode of the kind used by the :mod:`array`
1344 module. *\*args* is passed on to the constructor for the type.
1345
Richard Oudkerkedcf8da2013-11-17 17:00:38 +00001346 If *lock* is ``True`` (the default) then a new recursive lock
1347 object is created to synchronize access to the value. If *lock* is
1348 a :class:`Lock` or :class:`RLock` object then that will be used to
1349 synchronize access to the value. If *lock* is ``False`` then
1350 access to the returned object will not be automatically protected
1351 by a lock, so it will not necessarily be "process-safe".
1352
1353 Operations like ``+=`` which involve a read and write are not
1354 atomic. So if, for instance, you want to atomically increment a
1355 shared value it is insufficient to just do ::
1356
1357 counter.value += 1
1358
1359 Assuming the associated lock is recursive (which it is by default)
1360 you can instead do ::
1361
1362 with counter.get_lock():
1363 counter.value += 1
Benjamin Petersone711caf2008-06-11 16:44:04 +00001364
1365 Note that *lock* is a keyword-only argument.
1366
1367.. function:: Array(typecode_or_type, size_or_initializer, *, lock=True)
1368
1369 Return a ctypes array allocated from shared memory. By default the return
1370 value is actually a synchronized wrapper for the array.
1371
1372 *typecode_or_type* determines the type of the elements of the returned array:
1373 it is either a ctypes type or a one character typecode of the kind used by
1374 the :mod:`array` module. If *size_or_initializer* is an integer, then it
1375 determines the length of the array, and the array will be initially zeroed.
1376 Otherwise, *size_or_initializer* is a sequence which is used to initialize
1377 the array and whose length determines the length of the array.
1378
1379 If *lock* is ``True`` (the default) then a new lock object is created to
1380 synchronize access to the value. If *lock* is a :class:`Lock` or
1381 :class:`RLock` object then that will be used to synchronize access to the
1382 value. If *lock* is ``False`` then access to the returned object will not be
1383 automatically protected by a lock, so it will not necessarily be
1384 "process-safe".
1385
1386 Note that *lock* is a keyword only argument.
1387
Amaury Forgeot d'Arcb0c29162008-11-22 22:18:04 +00001388 Note that an array of :data:`ctypes.c_char` has *value* and *raw*
Benjamin Petersone711caf2008-06-11 16:44:04 +00001389 attributes which allow one to use it to store and retrieve strings.
1390
1391
1392The :mod:`multiprocessing.sharedctypes` module
1393>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
1394
1395.. module:: multiprocessing.sharedctypes
1396 :synopsis: Allocate ctypes objects from shared memory.
1397
1398The :mod:`multiprocessing.sharedctypes` module provides functions for allocating
1399:mod:`ctypes` objects from shared memory which can be inherited by child
1400processes.
1401
1402.. note::
1403
Georg Brandl2ee470f2008-07-16 12:55:28 +00001404 Although it is possible to store a pointer in shared memory remember that
1405 this will refer to a location in the address space of a specific process.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001406 However, the pointer is quite likely to be invalid in the context of a second
1407 process and trying to dereference the pointer from the second process may
1408 cause a crash.
1409
1410.. function:: RawArray(typecode_or_type, size_or_initializer)
1411
1412 Return a ctypes array allocated from shared memory.
1413
1414 *typecode_or_type* determines the type of the elements of the returned array:
1415 it is either a ctypes type or a one character typecode of the kind used by
1416 the :mod:`array` module. If *size_or_initializer* is an integer then it
1417 determines the length of the array, and the array will be initially zeroed.
1418 Otherwise *size_or_initializer* is a sequence which is used to initialize the
1419 array and whose length determines the length of the array.
1420
1421 Note that setting and getting an element is potentially non-atomic -- use
1422 :func:`Array` instead to make sure that access is automatically synchronized
1423 using a lock.
1424
1425.. function:: RawValue(typecode_or_type, *args)
1426
1427 Return a ctypes object allocated from shared memory.
1428
1429 *typecode_or_type* determines the type of the returned object: it is either a
1430 ctypes type or a one character typecode of the kind used by the :mod:`array`
Jesse Nollerb0516a62009-01-18 03:11:38 +00001431 module. *\*args* is passed on to the constructor for the type.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001432
1433 Note that setting and getting the value is potentially non-atomic -- use
1434 :func:`Value` instead to make sure that access is automatically synchronized
1435 using a lock.
1436
Amaury Forgeot d'Arcb0c29162008-11-22 22:18:04 +00001437 Note that an array of :data:`ctypes.c_char` has ``value`` and ``raw``
Benjamin Petersone711caf2008-06-11 16:44:04 +00001438 attributes which allow one to use it to store and retrieve strings -- see
1439 documentation for :mod:`ctypes`.
1440
Richard Oudkerk87ea7802012-05-29 12:01:47 +01001441.. function:: Array(typecode_or_type, size_or_initializer, *, lock=True)
Benjamin Petersone711caf2008-06-11 16:44:04 +00001442
1443 The same as :func:`RawArray` except that depending on the value of *lock* a
1444 process-safe synchronization wrapper may be returned instead of a raw ctypes
1445 array.
1446
1447 If *lock* is ``True`` (the default) then a new lock object is created to
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03001448 synchronize access to the value. If *lock* is a
1449 :class:`~multiprocessing.Lock` or :class:`~multiprocessing.RLock` object
1450 then that will be used to synchronize access to the
Benjamin Petersone711caf2008-06-11 16:44:04 +00001451 value. If *lock* is ``False`` then access to the returned object will not be
1452 automatically protected by a lock, so it will not necessarily be
1453 "process-safe".
1454
1455 Note that *lock* is a keyword-only argument.
1456
Richard Oudkerk87ea7802012-05-29 12:01:47 +01001457.. function:: Value(typecode_or_type, *args, lock=True)
Benjamin Petersone711caf2008-06-11 16:44:04 +00001458
1459 The same as :func:`RawValue` except that depending on the value of *lock* a
1460 process-safe synchronization wrapper may be returned instead of a raw ctypes
1461 object.
1462
1463 If *lock* is ``True`` (the default) then a new lock object is created to
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03001464 synchronize access to the value. If *lock* is a :class:`~multiprocessing.Lock` or
1465 :class:`~multiprocessing.RLock` object then that will be used to synchronize access to the
Benjamin Petersone711caf2008-06-11 16:44:04 +00001466 value. If *lock* is ``False`` then access to the returned object will not be
1467 automatically protected by a lock, so it will not necessarily be
1468 "process-safe".
1469
1470 Note that *lock* is a keyword-only argument.
1471
1472.. function:: copy(obj)
1473
1474 Return a ctypes object allocated from shared memory which is a copy of the
1475 ctypes object *obj*.
1476
1477.. function:: synchronized(obj[, lock])
1478
1479 Return a process-safe wrapper object for a ctypes object which uses *lock* to
1480 synchronize access. If *lock* is ``None`` (the default) then a
1481 :class:`multiprocessing.RLock` object is created automatically.
1482
1483 A synchronized wrapper will have two methods in addition to those of the
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00001484 object it wraps: :meth:`get_obj` returns the wrapped object and
1485 :meth:`get_lock` returns the lock object used for synchronization.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001486
1487 Note that accessing the ctypes object through the wrapper can be a lot slower
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00001488 than accessing the raw ctypes object.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001489
Charles-François Natalia924fc72014-05-25 14:12:12 +01001490 .. versionchanged:: 3.5
1491 Synchronized objects support the :term:`context manager` protocol.
1492
Benjamin Petersone711caf2008-06-11 16:44:04 +00001493
1494The table below compares the syntax for creating shared ctypes objects from
1495shared memory with the normal ctypes syntax. (In the table ``MyStruct`` is some
1496subclass of :class:`ctypes.Structure`.)
1497
1498==================== ========================== ===========================
1499ctypes sharedctypes using type sharedctypes using typecode
1500==================== ========================== ===========================
1501c_double(2.4) RawValue(c_double, 2.4) RawValue('d', 2.4)
1502MyStruct(4, 6) RawValue(MyStruct, 4, 6)
1503(c_short * 7)() RawArray(c_short, 7) RawArray('h', 7)
1504(c_int * 3)(9, 2, 8) RawArray(c_int, (9, 2, 8)) RawArray('i', (9, 2, 8))
1505==================== ========================== ===========================
1506
1507
1508Below is an example where a number of ctypes objects are modified by a child
1509process::
1510
1511 from multiprocessing import Process, Lock
1512 from multiprocessing.sharedctypes import Value, Array
1513 from ctypes import Structure, c_double
1514
1515 class Point(Structure):
1516 _fields_ = [('x', c_double), ('y', c_double)]
1517
1518 def modify(n, x, s, A):
1519 n.value **= 2
1520 x.value **= 2
1521 s.value = s.value.upper()
1522 for a in A:
1523 a.x **= 2
1524 a.y **= 2
1525
1526 if __name__ == '__main__':
1527 lock = Lock()
1528
1529 n = Value('i', 7)
R. David Murray8e8099c2009-04-28 18:02:00 +00001530 x = Value(c_double, 1.0/3.0, lock=False)
Richard Oudkerkb5175962012-09-10 13:00:33 +01001531 s = Array('c', b'hello world', lock=lock)
Benjamin Petersone711caf2008-06-11 16:44:04 +00001532 A = Array(Point, [(1.875,-6.25), (-5.75,2.0), (2.375,9.5)], lock=lock)
1533
1534 p = Process(target=modify, args=(n, x, s, A))
1535 p.start()
1536 p.join()
1537
Georg Brandl49702152008-09-29 06:43:45 +00001538 print(n.value)
1539 print(x.value)
1540 print(s.value)
1541 print([(a.x, a.y) for a in A])
Benjamin Petersone711caf2008-06-11 16:44:04 +00001542
1543
Georg Brandl49702152008-09-29 06:43:45 +00001544.. highlight:: none
Benjamin Petersone711caf2008-06-11 16:44:04 +00001545
1546The results printed are ::
1547
1548 49
1549 0.1111111111111111
1550 HELLO WORLD
1551 [(3.515625, 39.0625), (33.0625, 4.0), (5.640625, 90.25)]
1552
Ezio Melottif86b28e2012-04-13 20:50:48 -06001553.. highlight:: python3
Benjamin Petersone711caf2008-06-11 16:44:04 +00001554
1555
1556.. _multiprocessing-managers:
1557
1558Managers
1559~~~~~~~~
1560
1561Managers provide a way to create data which can be shared between different
Eli Bendersky78da3bc2012-07-13 10:10:05 +03001562processes, including sharing over a network between processes running on
1563different machines. A manager object controls a server process which manages
1564*shared objects*. Other processes can access the shared objects by using
1565proxies.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001566
1567.. function:: multiprocessing.Manager()
1568
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00001569 Returns a started :class:`~multiprocessing.managers.SyncManager` object which
1570 can be used for sharing objects between processes. The returned manager
1571 object corresponds to a spawned child process and has methods which will
1572 create shared objects and return corresponding proxies.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001573
1574.. module:: multiprocessing.managers
1575 :synopsis: Share data between process with shared objects.
1576
1577Manager processes will be shutdown as soon as they are garbage collected or
1578their parent process exits. The manager classes are defined in the
1579:mod:`multiprocessing.managers` module:
1580
1581.. class:: BaseManager([address[, authkey]])
1582
1583 Create a BaseManager object.
1584
Benjamin Peterson21896a32010-03-21 22:03:03 +00001585 Once created one should call :meth:`start` or ``get_server().serve_forever()`` to ensure
Benjamin Petersone711caf2008-06-11 16:44:04 +00001586 that the manager object refers to a started manager process.
1587
1588 *address* is the address on which the manager process listens for new
1589 connections. If *address* is ``None`` then an arbitrary one is chosen.
1590
Richard Oudkerk264e9ac2012-08-17 14:39:18 +01001591 *authkey* is the authentication key which will be used to check the
1592 validity of incoming connections to the server process. If
1593 *authkey* is ``None`` then ``current_process().authkey`` is used.
1594 Otherwise *authkey* is used and it must be a byte string.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001595
Benjamin Petersonf47ed4a2009-04-11 20:45:40 +00001596 .. method:: start([initializer[, initargs]])
Benjamin Petersone711caf2008-06-11 16:44:04 +00001597
Benjamin Petersonf47ed4a2009-04-11 20:45:40 +00001598 Start a subprocess to start the manager. If *initializer* is not ``None``
1599 then the subprocess will call ``initializer(*initargs)`` when it starts.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001600
Jesse Noller45239682008-11-28 18:46:19 +00001601 .. method:: get_server()
Georg Brandl48310cd2009-01-03 21:18:54 +00001602
Jesse Noller45239682008-11-28 18:46:19 +00001603 Returns a :class:`Server` object which represents the actual server under
Georg Brandl48310cd2009-01-03 21:18:54 +00001604 the control of the Manager. The :class:`Server` object supports the
R. David Murray8e8099c2009-04-28 18:02:00 +00001605 :meth:`serve_forever` method::
Georg Brandl48310cd2009-01-03 21:18:54 +00001606
Georg Brandl1f01deb2009-01-03 22:47:39 +00001607 >>> from multiprocessing.managers import BaseManager
Richard Oudkerk264e9ac2012-08-17 14:39:18 +01001608 >>> manager = BaseManager(address=('', 50000), authkey=b'abc')
R. David Murray8e8099c2009-04-28 18:02:00 +00001609 >>> server = manager.get_server()
1610 >>> server.serve_forever()
Georg Brandl48310cd2009-01-03 21:18:54 +00001611
R. David Murray8e8099c2009-04-28 18:02:00 +00001612 :class:`Server` additionally has an :attr:`address` attribute.
Jesse Noller45239682008-11-28 18:46:19 +00001613
1614 .. method:: connect()
Georg Brandl48310cd2009-01-03 21:18:54 +00001615
R. David Murray8e8099c2009-04-28 18:02:00 +00001616 Connect a local manager object to a remote manager process::
Georg Brandl48310cd2009-01-03 21:18:54 +00001617
Jesse Noller45239682008-11-28 18:46:19 +00001618 >>> from multiprocessing.managers import BaseManager
Richard Oudkerk264e9ac2012-08-17 14:39:18 +01001619 >>> m = BaseManager(address=('127.0.0.1', 5000), authkey=b'abc')
Jesse Noller45239682008-11-28 18:46:19 +00001620 >>> m.connect()
1621
Benjamin Petersone711caf2008-06-11 16:44:04 +00001622 .. method:: shutdown()
1623
1624 Stop the process used by the manager. This is only available if
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00001625 :meth:`start` has been used to start the server process.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001626
1627 This can be called multiple times.
1628
1629 .. method:: register(typeid[, callable[, proxytype[, exposed[, method_to_typeid[, create_method]]]]])
1630
1631 A classmethod which can be used for registering a type or callable with
1632 the manager class.
1633
1634 *typeid* is a "type identifier" which is used to identify a particular
1635 type of shared object. This must be a string.
1636
1637 *callable* is a callable used for creating objects for this type
Richard Oudkerkf0604fd2012-06-11 17:56:08 +01001638 identifier. If a manager instance will be connected to the
1639 server using the :meth:`connect` method, or if the
1640 *create_method* argument is ``False`` then this can be left as
1641 ``None``.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001642
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00001643 *proxytype* is a subclass of :class:`BaseProxy` which is used to create
1644 proxies for shared objects with this *typeid*. If ``None`` then a proxy
1645 class is created automatically.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001646
1647 *exposed* is used to specify a sequence of method names which proxies for
1648 this typeid should be allowed to access using
Larry Hastings3732ed22014-03-15 21:13:56 -07001649 :meth:`BaseProxy._callmethod`. (If *exposed* is ``None`` then
Benjamin Petersone711caf2008-06-11 16:44:04 +00001650 :attr:`proxytype._exposed_` is used instead if it exists.) In the case
1651 where no exposed list is specified, all "public methods" of the shared
1652 object will be accessible. (Here a "public method" means any attribute
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03001653 which has a :meth:`~object.__call__` method and whose name does not begin
1654 with ``'_'``.)
Benjamin Petersone711caf2008-06-11 16:44:04 +00001655
1656 *method_to_typeid* is a mapping used to specify the return type of those
1657 exposed methods which should return a proxy. It maps method names to
1658 typeid strings. (If *method_to_typeid* is ``None`` then
1659 :attr:`proxytype._method_to_typeid_` is used instead if it exists.) If a
1660 method's name is not a key of this mapping or if the mapping is ``None``
1661 then the object returned by the method will be copied by value.
1662
1663 *create_method* determines whether a method should be created with name
1664 *typeid* which can be used to tell the server process to create a new
1665 shared object and return a proxy for it. By default it is ``True``.
1666
1667 :class:`BaseManager` instances also have one read-only property:
1668
1669 .. attribute:: address
1670
1671 The address used by the manager.
1672
Richard Oudkerkac385712012-06-18 21:29:30 +01001673 .. versionchanged:: 3.3
Serhiy Storchaka14867992014-09-10 23:43:41 +03001674 Manager objects support the context management protocol -- see
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03001675 :ref:`typecontextmanager`. :meth:`~contextmanager.__enter__` starts the
1676 server process (if it has not already started) and then returns the
1677 manager object. :meth:`~contextmanager.__exit__` calls :meth:`shutdown`.
Richard Oudkerkac385712012-06-18 21:29:30 +01001678
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03001679 In previous versions :meth:`~contextmanager.__enter__` did not start the
Richard Oudkerkac385712012-06-18 21:29:30 +01001680 manager's server process if it was not already started.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001681
1682.. class:: SyncManager
1683
1684 A subclass of :class:`BaseManager` which can be used for the synchronization
1685 of processes. Objects of this type are returned by
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00001686 :func:`multiprocessing.Manager`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001687
Davin Potts86a76682016-09-07 18:48:01 -05001688 Its methods create and return :ref:`multiprocessing-proxy_objects` for a
1689 number of commonly used data types to be synchronized across processes.
1690 This notably includes shared lists and dictionaries.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001691
Richard Oudkerk3730a172012-06-15 18:26:07 +01001692 .. method:: Barrier(parties[, action[, timeout]])
1693
1694 Create a shared :class:`threading.Barrier` object and return a
1695 proxy for it.
1696
1697 .. versionadded:: 3.3
1698
Benjamin Petersone711caf2008-06-11 16:44:04 +00001699 .. method:: BoundedSemaphore([value])
1700
1701 Create a shared :class:`threading.BoundedSemaphore` object and return a
1702 proxy for it.
1703
1704 .. method:: Condition([lock])
1705
1706 Create a shared :class:`threading.Condition` object and return a proxy for
1707 it.
1708
1709 If *lock* is supplied then it should be a proxy for a
1710 :class:`threading.Lock` or :class:`threading.RLock` object.
1711
Charles-François Natalic8ce7152012-04-17 18:45:57 +02001712 .. versionchanged:: 3.3
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03001713 The :meth:`~threading.Condition.wait_for` method was added.
Charles-François Natalic8ce7152012-04-17 18:45:57 +02001714
Benjamin Petersone711caf2008-06-11 16:44:04 +00001715 .. method:: Event()
1716
1717 Create a shared :class:`threading.Event` object and return a proxy for it.
1718
1719 .. method:: Lock()
1720
1721 Create a shared :class:`threading.Lock` object and return a proxy for it.
1722
1723 .. method:: Namespace()
1724
1725 Create a shared :class:`Namespace` object and return a proxy for it.
1726
1727 .. method:: Queue([maxsize])
1728
Benjamin Peterson257060a2008-06-28 01:42:41 +00001729 Create a shared :class:`queue.Queue` object and return a proxy for it.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001730
1731 .. method:: RLock()
1732
1733 Create a shared :class:`threading.RLock` object and return a proxy for it.
1734
1735 .. method:: Semaphore([value])
1736
1737 Create a shared :class:`threading.Semaphore` object and return a proxy for
1738 it.
1739
1740 .. method:: Array(typecode, sequence)
1741
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00001742 Create an array and return a proxy for it.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001743
1744 .. method:: Value(typecode, value)
1745
1746 Create an object with a writable ``value`` attribute and return a proxy
1747 for it.
1748
1749 .. method:: dict()
1750 dict(mapping)
1751 dict(sequence)
1752
Davin Potts86a76682016-09-07 18:48:01 -05001753 Create a shared :class:`dict` object and return a proxy for it.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001754
1755 .. method:: list()
1756 list(sequence)
1757
Davin Potts86a76682016-09-07 18:48:01 -05001758 Create a shared :class:`list` object and return a proxy for it.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001759
Davin Potts86a76682016-09-07 18:48:01 -05001760 .. versionchanged:: 3.6
1761 Shared objects are capable of being nested. For example, a shared
1762 container object such as a shared list can contain other shared objects
1763 which will all be managed and synchronized by the :class:`SyncManager`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001764
Senthil Kumaran6a0514e2016-01-20 03:10:13 -08001765.. class:: Namespace
Benjamin Petersone711caf2008-06-11 16:44:04 +00001766
Senthil Kumaran6a0514e2016-01-20 03:10:13 -08001767 A type that can register with :class:`SyncManager`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001768
Senthil Kumaran6a0514e2016-01-20 03:10:13 -08001769 A namespace object has no public methods, but does have writable attributes.
1770 Its representation shows the values of its attributes.
R. David Murray8e8099c2009-04-28 18:02:00 +00001771
Senthil Kumaran6a0514e2016-01-20 03:10:13 -08001772 However, when using a proxy for a namespace object, an attribute beginning
1773 with ``'_'`` will be an attribute of the proxy and not an attribute of the
1774 referent:
Benjamin Petersone711caf2008-06-11 16:44:04 +00001775
Senthil Kumaran6a0514e2016-01-20 03:10:13 -08001776 .. doctest::
1777
1778 >>> manager = multiprocessing.Manager()
1779 >>> Global = manager.Namespace()
1780 >>> Global.x = 10
1781 >>> Global.y = 'hello'
1782 >>> Global._z = 12.3 # this is an attribute of the proxy
1783 >>> print(Global)
1784 Namespace(x=10, y='hello')
Benjamin Petersone711caf2008-06-11 16:44:04 +00001785
1786
1787Customized managers
1788>>>>>>>>>>>>>>>>>>>
1789
1790To create one's own manager, one creates a subclass of :class:`BaseManager` and
Eli Benderskyd08effe2011-12-31 07:20:26 +02001791uses the :meth:`~BaseManager.register` classmethod to register new types or
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00001792callables with the manager class. For example::
Benjamin Petersone711caf2008-06-11 16:44:04 +00001793
1794 from multiprocessing.managers import BaseManager
1795
Éric Araujo28053fb2010-11-22 03:09:19 +00001796 class MathsClass:
Benjamin Petersone711caf2008-06-11 16:44:04 +00001797 def add(self, x, y):
1798 return x + y
1799 def mul(self, x, y):
1800 return x * y
1801
1802 class MyManager(BaseManager):
1803 pass
1804
1805 MyManager.register('Maths', MathsClass)
1806
1807 if __name__ == '__main__':
Richard Oudkerk633c4d92012-06-18 21:29:36 +01001808 with MyManager() as manager:
1809 maths = manager.Maths()
1810 print(maths.add(4, 3)) # prints 7
1811 print(maths.mul(7, 8)) # prints 56
Benjamin Petersone711caf2008-06-11 16:44:04 +00001812
1813
1814Using a remote manager
1815>>>>>>>>>>>>>>>>>>>>>>
1816
1817It is possible to run a manager server on one machine and have clients use it
1818from other machines (assuming that the firewalls involved allow it).
1819
1820Running the following commands creates a server for a single shared queue which
1821remote clients can access::
1822
1823 >>> from multiprocessing.managers import BaseManager
Benjamin Peterson257060a2008-06-28 01:42:41 +00001824 >>> import queue
1825 >>> queue = queue.Queue()
Benjamin Petersone711caf2008-06-11 16:44:04 +00001826 >>> class QueueManager(BaseManager): pass
Jesse Noller45239682008-11-28 18:46:19 +00001827 >>> QueueManager.register('get_queue', callable=lambda:queue)
Richard Oudkerk264e9ac2012-08-17 14:39:18 +01001828 >>> m = QueueManager(address=('', 50000), authkey=b'abracadabra')
Jesse Noller45239682008-11-28 18:46:19 +00001829 >>> s = m.get_server()
R. David Murray8e8099c2009-04-28 18:02:00 +00001830 >>> s.serve_forever()
Benjamin Petersone711caf2008-06-11 16:44:04 +00001831
1832One client can access the server as follows::
1833
1834 >>> from multiprocessing.managers import BaseManager
1835 >>> class QueueManager(BaseManager): pass
Jesse Noller45239682008-11-28 18:46:19 +00001836 >>> QueueManager.register('get_queue')
Richard Oudkerk264e9ac2012-08-17 14:39:18 +01001837 >>> m = QueueManager(address=('foo.bar.org', 50000), authkey=b'abracadabra')
Jesse Noller45239682008-11-28 18:46:19 +00001838 >>> m.connect()
1839 >>> queue = m.get_queue()
Benjamin Petersone711caf2008-06-11 16:44:04 +00001840 >>> queue.put('hello')
1841
1842Another client can also use it::
1843
1844 >>> from multiprocessing.managers import BaseManager
1845 >>> class QueueManager(BaseManager): pass
R. David Murray8e8099c2009-04-28 18:02:00 +00001846 >>> QueueManager.register('get_queue')
Richard Oudkerk264e9ac2012-08-17 14:39:18 +01001847 >>> m = QueueManager(address=('foo.bar.org', 50000), authkey=b'abracadabra')
R. David Murray8e8099c2009-04-28 18:02:00 +00001848 >>> m.connect()
1849 >>> queue = m.get_queue()
Benjamin Petersone711caf2008-06-11 16:44:04 +00001850 >>> queue.get()
1851 'hello'
1852
Georg Brandl48310cd2009-01-03 21:18:54 +00001853Local processes can also access that queue, using the code from above on the
Jesse Noller45239682008-11-28 18:46:19 +00001854client to access it remotely::
1855
1856 >>> from multiprocessing import Process, Queue
1857 >>> from multiprocessing.managers import BaseManager
1858 >>> class Worker(Process):
1859 ... def __init__(self, q):
1860 ... self.q = q
1861 ... super(Worker, self).__init__()
1862 ... def run(self):
1863 ... self.q.put('local hello')
Georg Brandl48310cd2009-01-03 21:18:54 +00001864 ...
Jesse Noller45239682008-11-28 18:46:19 +00001865 >>> queue = Queue()
1866 >>> w = Worker(queue)
1867 >>> w.start()
1868 >>> class QueueManager(BaseManager): pass
Georg Brandl48310cd2009-01-03 21:18:54 +00001869 ...
Jesse Noller45239682008-11-28 18:46:19 +00001870 >>> QueueManager.register('get_queue', callable=lambda: queue)
Richard Oudkerk264e9ac2012-08-17 14:39:18 +01001871 >>> m = QueueManager(address=('', 50000), authkey=b'abracadabra')
Jesse Noller45239682008-11-28 18:46:19 +00001872 >>> s = m.get_server()
1873 >>> s.serve_forever()
Benjamin Petersone711caf2008-06-11 16:44:04 +00001874
Davin Potts86a76682016-09-07 18:48:01 -05001875.. _multiprocessing-proxy_objects:
1876
Benjamin Petersone711caf2008-06-11 16:44:04 +00001877Proxy Objects
1878~~~~~~~~~~~~~
1879
1880A proxy is an object which *refers* to a shared object which lives (presumably)
1881in a different process. The shared object is said to be the *referent* of the
1882proxy. Multiple proxy objects may have the same referent.
1883
1884A proxy object has methods which invoke corresponding methods of its referent
1885(although not every method of the referent will necessarily be available through
Davin Potts86a76682016-09-07 18:48:01 -05001886the proxy). In this way, a proxy can be used just like its referent can:
R. David Murray8e8099c2009-04-28 18:02:00 +00001887
1888.. doctest::
Benjamin Petersone711caf2008-06-11 16:44:04 +00001889
1890 >>> from multiprocessing import Manager
1891 >>> manager = Manager()
1892 >>> l = manager.list([i*i for i in range(10)])
Georg Brandl49702152008-09-29 06:43:45 +00001893 >>> print(l)
Benjamin Petersone711caf2008-06-11 16:44:04 +00001894 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Georg Brandl49702152008-09-29 06:43:45 +00001895 >>> print(repr(l))
R. David Murray8e8099c2009-04-28 18:02:00 +00001896 <ListProxy object, typeid 'list' at 0x...>
Benjamin Petersone711caf2008-06-11 16:44:04 +00001897 >>> l[4]
1898 16
1899 >>> l[2:5]
1900 [4, 9, 16]
1901
1902Notice that applying :func:`str` to a proxy will return the representation of
1903the referent, whereas applying :func:`repr` will return the representation of
1904the proxy.
1905
1906An important feature of proxy objects is that they are picklable so they can be
Davin Potts86a76682016-09-07 18:48:01 -05001907passed between processes. As such, a referent can contain
1908:ref:`multiprocessing-proxy_objects`. This permits nesting of these managed
1909lists, dicts, and other :ref:`multiprocessing-proxy_objects`:
R. David Murray8e8099c2009-04-28 18:02:00 +00001910
1911.. doctest::
Benjamin Petersone711caf2008-06-11 16:44:04 +00001912
1913 >>> a = manager.list()
1914 >>> b = manager.list()
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00001915 >>> a.append(b) # referent of a now contains referent of b
Georg Brandl49702152008-09-29 06:43:45 +00001916 >>> print(a, b)
Davin Potts86a76682016-09-07 18:48:01 -05001917 [<ListProxy object, typeid 'list' at ...>] []
Benjamin Petersone711caf2008-06-11 16:44:04 +00001918 >>> b.append('hello')
Davin Potts86a76682016-09-07 18:48:01 -05001919 >>> print(a[0], b)
1920 ['hello'] ['hello']
1921
1922Similarly, dict and list proxies may be nested inside one another::
1923
1924 >>> l_outer = manager.list([ manager.dict() for i in range(2) ])
1925 >>> d_first_inner = l_outer[0]
1926 >>> d_first_inner['a'] = 1
1927 >>> d_first_inner['b'] = 2
1928 >>> l_outer[1]['c'] = 3
1929 >>> l_outer[1]['z'] = 26
1930 >>> print(l_outer[0])
1931 {'a': 1, 'b': 2}
1932 >>> print(l_outer[1])
1933 {'c': 3, 'z': 26}
1934
1935If standard (non-proxy) :class:`list` or :class:`dict` objects are contained
1936in a referent, modifications to those mutable values will not be propagated
1937through the manager because the proxy has no way of knowing when the values
1938contained within are modified. However, storing a value in a container proxy
1939(which triggers a ``__setitem__`` on the proxy object) does propagate through
1940the manager and so to effectively modify such an item, one could re-assign the
1941modified value to the container proxy::
1942
1943 # create a list proxy and append a mutable object (a dictionary)
1944 lproxy = manager.list()
1945 lproxy.append({})
1946 # now mutate the dictionary
1947 d = lproxy[0]
1948 d['a'] = 1
1949 d['b'] = 2
1950 # at this point, the changes to d are not yet synced, but by
1951 # updating the dictionary, the proxy is notified of the change
1952 lproxy[0] = d
1953
1954This approach is perhaps less convenient than employing nested
1955:ref:`multiprocessing-proxy_objects` for most use cases but also
1956demonstrates a level of control over the synchronization.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001957
1958.. note::
1959
1960 The proxy types in :mod:`multiprocessing` do nothing to support comparisons
R. David Murray8e8099c2009-04-28 18:02:00 +00001961 by value. So, for instance, we have:
Benjamin Petersone711caf2008-06-11 16:44:04 +00001962
R. David Murray8e8099c2009-04-28 18:02:00 +00001963 .. doctest::
Benjamin Petersone711caf2008-06-11 16:44:04 +00001964
R. David Murray8e8099c2009-04-28 18:02:00 +00001965 >>> manager.list([1,2,3]) == [1,2,3]
1966 False
1967
1968 One should just use a copy of the referent instead when making comparisons.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001969
1970.. class:: BaseProxy
1971
1972 Proxy objects are instances of subclasses of :class:`BaseProxy`.
1973
Benjamin Peterson6ebe78f2008-12-21 00:06:59 +00001974 .. method:: _callmethod(methodname[, args[, kwds]])
Benjamin Petersone711caf2008-06-11 16:44:04 +00001975
1976 Call and return the result of a method of the proxy's referent.
1977
1978 If ``proxy`` is a proxy whose referent is ``obj`` then the expression ::
1979
Benjamin Peterson6ebe78f2008-12-21 00:06:59 +00001980 proxy._callmethod(methodname, args, kwds)
Benjamin Petersone711caf2008-06-11 16:44:04 +00001981
1982 will evaluate the expression ::
1983
1984 getattr(obj, methodname)(*args, **kwds)
1985
1986 in the manager's process.
1987
1988 The returned value will be a copy of the result of the call or a proxy to
1989 a new shared object -- see documentation for the *method_to_typeid*
1990 argument of :meth:`BaseManager.register`.
1991
Ezio Melottie130a522011-10-19 10:58:56 +03001992 If an exception is raised by the call, then is re-raised by
Benjamin Peterson6ebe78f2008-12-21 00:06:59 +00001993 :meth:`_callmethod`. If some other exception is raised in the manager's
Benjamin Petersone711caf2008-06-11 16:44:04 +00001994 process then this is converted into a :exc:`RemoteError` exception and is
Benjamin Peterson6ebe78f2008-12-21 00:06:59 +00001995 raised by :meth:`_callmethod`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001996
1997 Note in particular that an exception will be raised if *methodname* has
Martin Panterd21e0b52015-10-10 10:36:22 +00001998 not been *exposed*.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001999
R. David Murray8e8099c2009-04-28 18:02:00 +00002000 An example of the usage of :meth:`_callmethod`:
2001
2002 .. doctest::
Benjamin Petersone711caf2008-06-11 16:44:04 +00002003
2004 >>> l = manager.list(range(10))
Benjamin Peterson6ebe78f2008-12-21 00:06:59 +00002005 >>> l._callmethod('__len__')
Benjamin Petersone711caf2008-06-11 16:44:04 +00002006 10
Larry Hastingsb2c2dc32015-03-29 15:32:55 -07002007 >>> l._callmethod('__getitem__', (slice(2, 7),)) # equivalent to l[2:7]
Benjamin Petersone711caf2008-06-11 16:44:04 +00002008 [2, 3, 4, 5, 6]
Larry Hastingsb2c2dc32015-03-29 15:32:55 -07002009 >>> l._callmethod('__getitem__', (20,)) # equivalent to l[20]
Benjamin Petersone711caf2008-06-11 16:44:04 +00002010 Traceback (most recent call last):
2011 ...
2012 IndexError: list index out of range
2013
Benjamin Peterson6ebe78f2008-12-21 00:06:59 +00002014 .. method:: _getvalue()
Benjamin Petersone711caf2008-06-11 16:44:04 +00002015
2016 Return a copy of the referent.
2017
2018 If the referent is unpicklable then this will raise an exception.
2019
2020 .. method:: __repr__
2021
2022 Return a representation of the proxy object.
2023
2024 .. method:: __str__
2025
2026 Return the representation of the referent.
2027
2028
2029Cleanup
2030>>>>>>>
2031
2032A proxy object uses a weakref callback so that when it gets garbage collected it
2033deregisters itself from the manager which owns its referent.
2034
2035A shared object gets deleted from the manager process when there are no longer
2036any proxies referring to it.
2037
2038
2039Process Pools
2040~~~~~~~~~~~~~
2041
2042.. module:: multiprocessing.pool
2043 :synopsis: Create pools of processes.
2044
2045One can create a pool of processes which will carry out tasks submitted to it
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00002046with the :class:`Pool` class.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002047
Richard Oudkerkb1694cf2013-10-16 16:41:56 +01002048.. class:: Pool([processes[, initializer[, initargs[, maxtasksperchild [, context]]]]])
Benjamin Petersone711caf2008-06-11 16:44:04 +00002049
2050 A process pool object which controls a pool of worker processes to which jobs
2051 can be submitted. It supports asynchronous results with timeouts and
2052 callbacks and has a parallel map implementation.
2053
2054 *processes* is the number of worker processes to use. If *processes* is
Larry Hastings3732ed22014-03-15 21:13:56 -07002055 ``None`` then the number returned by :func:`os.cpu_count` is used.
2056
2057 If *initializer* is not ``None`` then each worker process will call
Benjamin Petersone711caf2008-06-11 16:44:04 +00002058 ``initializer(*initargs)`` when it starts.
2059
Larry Hastings3732ed22014-03-15 21:13:56 -07002060 *maxtasksperchild* is the number of tasks a worker process can complete
2061 before it will exit and be replaced with a fresh worker process, to enable
Serhiy Storchakaecf41da2016-10-19 16:29:26 +03002062 unused resources to be freed. The default *maxtasksperchild* is ``None``, which
Larry Hastings3732ed22014-03-15 21:13:56 -07002063 means worker processes will live as long as the pool.
2064
2065 *context* can be used to specify the context used for starting
2066 the worker processes. Usually a pool is created using the
2067 function :func:`multiprocessing.Pool` or the :meth:`Pool` method
2068 of a context object. In both cases *context* is set
2069 appropriately.
2070
Richard Oudkerkb3c4b982013-07-02 12:32:00 +01002071 Note that the methods of the pool object should only be called by
2072 the process which created the pool.
2073
Georg Brandl17ef0d52010-10-17 06:21:59 +00002074 .. versionadded:: 3.2
Larry Hastings3732ed22014-03-15 21:13:56 -07002075 *maxtasksperchild*
Jesse Noller1f0b6582010-01-27 03:36:01 +00002076
Richard Oudkerkb1694cf2013-10-16 16:41:56 +01002077 .. versionadded:: 3.4
Larry Hastings3732ed22014-03-15 21:13:56 -07002078 *context*
Richard Oudkerkb1694cf2013-10-16 16:41:56 +01002079
Jesse Noller1f0b6582010-01-27 03:36:01 +00002080 .. note::
2081
Georg Brandl17ef0d52010-10-17 06:21:59 +00002082 Worker processes within a :class:`Pool` typically live for the complete
2083 duration of the Pool's work queue. A frequent pattern found in other
2084 systems (such as Apache, mod_wsgi, etc) to free resources held by
2085 workers is to allow a worker within a pool to complete only a set
2086 amount of work before being exiting, being cleaned up and a new
2087 process spawned to replace the old one. The *maxtasksperchild*
2088 argument to the :class:`Pool` exposes this ability to the end user.
Jesse Noller1f0b6582010-01-27 03:36:01 +00002089
Benjamin Petersone711caf2008-06-11 16:44:04 +00002090 .. method:: apply(func[, args[, kwds]])
2091
Benjamin Peterson37d2fe02008-10-24 22:28:58 +00002092 Call *func* with arguments *args* and keyword arguments *kwds*. It blocks
Eli Benderskyd08effe2011-12-31 07:20:26 +02002093 until the result is ready. Given this blocks, :meth:`apply_async` is
2094 better suited for performing work in parallel. Additionally, *func*
2095 is only executed in one of the workers of the pool.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002096
Ask Solem1d3b8932010-11-09 21:36:56 +00002097 .. method:: apply_async(func[, args[, kwds[, callback[, error_callback]]]])
Benjamin Petersone711caf2008-06-11 16:44:04 +00002098
2099 A variant of the :meth:`apply` method which returns a result object.
2100
2101 If *callback* is specified then it should be a callable which accepts a
2102 single argument. When the result becomes ready *callback* is applied to
Ask Solem1d3b8932010-11-09 21:36:56 +00002103 it, that is unless the call failed, in which case the *error_callback*
Martin Panterd21e0b52015-10-10 10:36:22 +00002104 is applied instead.
Ask Solem1d3b8932010-11-09 21:36:56 +00002105
2106 If *error_callback* is specified then it should be a callable which
2107 accepts a single argument. If the target function fails, then
2108 the *error_callback* is called with the exception instance.
2109
2110 Callbacks should complete immediately since otherwise the thread which
2111 handles the results will get blocked.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002112
2113 .. method:: map(func, iterable[, chunksize])
2114
Georg Brandl22b34312009-07-26 14:54:51 +00002115 A parallel equivalent of the :func:`map` built-in function (it supports only
Eli Benderskyd08effe2011-12-31 07:20:26 +02002116 one *iterable* argument though). It blocks until the result is ready.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002117
2118 This method chops the iterable into a number of chunks which it submits to
2119 the process pool as separate tasks. The (approximate) size of these
2120 chunks can be specified by setting *chunksize* to a positive integer.
2121
Sandro Tosidb79e952011-08-08 16:38:13 +02002122 .. method:: map_async(func, iterable[, chunksize[, callback[, error_callback]]])
Benjamin Petersone711caf2008-06-11 16:44:04 +00002123
Georg Brandl502d9a52009-07-26 15:02:41 +00002124 A variant of the :meth:`.map` method which returns a result object.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002125
2126 If *callback* is specified then it should be a callable which accepts a
2127 single argument. When the result becomes ready *callback* is applied to
Ask Solem1d3b8932010-11-09 21:36:56 +00002128 it, that is unless the call failed, in which case the *error_callback*
Martin Panterd21e0b52015-10-10 10:36:22 +00002129 is applied instead.
Ask Solem1d3b8932010-11-09 21:36:56 +00002130
2131 If *error_callback* is specified then it should be a callable which
2132 accepts a single argument. If the target function fails, then
2133 the *error_callback* is called with the exception instance.
2134
2135 Callbacks should complete immediately since otherwise the thread which
2136 handles the results will get blocked.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002137
2138 .. method:: imap(func, iterable[, chunksize])
2139
Georg Brandl92905032008-11-22 08:51:39 +00002140 A lazier version of :meth:`map`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002141
2142 The *chunksize* argument is the same as the one used by the :meth:`.map`
2143 method. For very long iterables using a large value for *chunksize* can
Ezio Melottie130a522011-10-19 10:58:56 +03002144 make the job complete **much** faster than using the default value of
Benjamin Petersone711caf2008-06-11 16:44:04 +00002145 ``1``.
2146
Georg Brandl502d9a52009-07-26 15:02:41 +00002147 Also if *chunksize* is ``1`` then the :meth:`!next` method of the iterator
Benjamin Petersone711caf2008-06-11 16:44:04 +00002148 returned by the :meth:`imap` method has an optional *timeout* parameter:
2149 ``next(timeout)`` will raise :exc:`multiprocessing.TimeoutError` if the
2150 result cannot be returned within *timeout* seconds.
2151
2152 .. method:: imap_unordered(func, iterable[, chunksize])
2153
2154 The same as :meth:`imap` except that the ordering of the results from the
2155 returned iterator should be considered arbitrary. (Only when there is
2156 only one worker process is the order guaranteed to be "correct".)
2157
Antoine Pitroude911b22011-12-21 11:03:24 +01002158 .. method:: starmap(func, iterable[, chunksize])
2159
Georg Brandl93a56cd2014-10-30 22:25:41 +01002160 Like :meth:`map` except that the elements of the *iterable* are expected
Antoine Pitroude911b22011-12-21 11:03:24 +01002161 to be iterables that are unpacked as arguments.
2162
Georg Brandl93a56cd2014-10-30 22:25:41 +01002163 Hence an *iterable* of ``[(1,2), (3, 4)]`` results in ``[func(1,2),
2164 func(3,4)]``.
Antoine Pitroude911b22011-12-21 11:03:24 +01002165
2166 .. versionadded:: 3.3
2167
2168 .. method:: starmap_async(func, iterable[, chunksize[, callback[, error_back]]])
2169
2170 A combination of :meth:`starmap` and :meth:`map_async` that iterates over
Georg Brandl93a56cd2014-10-30 22:25:41 +01002171 *iterable* of iterables and calls *func* with the iterables unpacked.
Antoine Pitroude911b22011-12-21 11:03:24 +01002172 Returns a result object.
2173
2174 .. versionadded:: 3.3
2175
Benjamin Petersone711caf2008-06-11 16:44:04 +00002176 .. method:: close()
2177
2178 Prevents any more tasks from being submitted to the pool. Once all the
2179 tasks have been completed the worker processes will exit.
2180
2181 .. method:: terminate()
2182
2183 Stops the worker processes immediately without completing outstanding
2184 work. When the pool object is garbage collected :meth:`terminate` will be
2185 called immediately.
2186
2187 .. method:: join()
2188
2189 Wait for the worker processes to exit. One must call :meth:`close` or
2190 :meth:`terminate` before using :meth:`join`.
2191
Richard Oudkerkd69cfe82012-06-18 17:47:52 +01002192 .. versionadded:: 3.3
Serhiy Storchaka14867992014-09-10 23:43:41 +03002193 Pool objects now support the context management protocol -- see
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002194 :ref:`typecontextmanager`. :meth:`~contextmanager.__enter__` returns the
Georg Brandl325a1c22013-10-27 09:16:01 +01002195 pool object, and :meth:`~contextmanager.__exit__` calls :meth:`terminate`.
Richard Oudkerkd69cfe82012-06-18 17:47:52 +01002196
Benjamin Petersone711caf2008-06-11 16:44:04 +00002197
2198.. class:: AsyncResult
2199
2200 The class of the result returned by :meth:`Pool.apply_async` and
2201 :meth:`Pool.map_async`.
2202
Georg Brandle3d70ae2008-11-22 08:54:21 +00002203 .. method:: get([timeout])
Benjamin Petersone711caf2008-06-11 16:44:04 +00002204
2205 Return the result when it arrives. If *timeout* is not ``None`` and the
2206 result does not arrive within *timeout* seconds then
2207 :exc:`multiprocessing.TimeoutError` is raised. If the remote call raised
2208 an exception then that exception will be reraised by :meth:`get`.
2209
2210 .. method:: wait([timeout])
2211
2212 Wait until the result is available or until *timeout* seconds pass.
2213
2214 .. method:: ready()
2215
2216 Return whether the call has completed.
2217
2218 .. method:: successful()
2219
2220 Return whether the call completed without raising an exception. Will
2221 raise :exc:`AssertionError` if the result is not ready.
2222
2223The following example demonstrates the use of a pool::
2224
2225 from multiprocessing import Pool
Berker Peksag7405c162016-01-21 23:59:49 +02002226 import time
Benjamin Petersone711caf2008-06-11 16:44:04 +00002227
2228 def f(x):
2229 return x*x
2230
2231 if __name__ == '__main__':
Richard Oudkerk633c4d92012-06-18 21:29:36 +01002232 with Pool(processes=4) as pool: # start 4 worker processes
Berker Peksag7405c162016-01-21 23:59:49 +02002233 result = pool.apply_async(f, (10,)) # evaluate "f(10)" asynchronously in a single process
Richard Oudkerk633c4d92012-06-18 21:29:36 +01002234 print(result.get(timeout=1)) # prints "100" unless your computer is *very* slow
Benjamin Petersone711caf2008-06-11 16:44:04 +00002235
Richard Oudkerk633c4d92012-06-18 21:29:36 +01002236 print(pool.map(f, range(10))) # prints "[0, 1, 4,..., 81]"
Benjamin Petersone711caf2008-06-11 16:44:04 +00002237
Richard Oudkerk633c4d92012-06-18 21:29:36 +01002238 it = pool.imap(f, range(10))
2239 print(next(it)) # prints "0"
2240 print(next(it)) # prints "1"
2241 print(it.next(timeout=1)) # prints "4" unless your computer is *very* slow
Benjamin Petersone711caf2008-06-11 16:44:04 +00002242
Richard Oudkerk633c4d92012-06-18 21:29:36 +01002243 result = pool.apply_async(time.sleep, (10,))
Berker Peksag7405c162016-01-21 23:59:49 +02002244 print(result.get(timeout=1)) # raises multiprocessing.TimeoutError
Benjamin Petersone711caf2008-06-11 16:44:04 +00002245
2246
2247.. _multiprocessing-listeners-clients:
2248
2249Listeners and Clients
2250~~~~~~~~~~~~~~~~~~~~~
2251
2252.. module:: multiprocessing.connection
2253 :synopsis: API for dealing with sockets.
2254
2255Usually message passing between processes is done using queues or by using
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002256:class:`~multiprocessing.Connection` objects returned by
2257:func:`~multiprocessing.Pipe`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002258
2259However, the :mod:`multiprocessing.connection` module allows some extra
2260flexibility. It basically gives a high level message oriented API for dealing
Antoine Pitroubdb1cf12012-03-05 19:28:37 +01002261with sockets or Windows named pipes. It also has support for *digest
2262authentication* using the :mod:`hmac` module, and for polling
2263multiple connections at the same time.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002264
2265
2266.. function:: deliver_challenge(connection, authkey)
2267
2268 Send a randomly generated message to the other end of the connection and wait
2269 for a reply.
2270
2271 If the reply matches the digest of the message using *authkey* as the key
2272 then a welcome message is sent to the other end of the connection. Otherwise
Eli Benderskyb674dcf2012-07-13 09:45:31 +03002273 :exc:`~multiprocessing.AuthenticationError` is raised.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002274
Ezio Melottic09959a2013-04-10 17:59:20 +03002275.. function:: answer_challenge(connection, authkey)
Benjamin Petersone711caf2008-06-11 16:44:04 +00002276
2277 Receive a message, calculate the digest of the message using *authkey* as the
2278 key, and then send the digest back.
2279
Eli Benderskyb674dcf2012-07-13 09:45:31 +03002280 If a welcome message is not received, then
2281 :exc:`~multiprocessing.AuthenticationError` is raised.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002282
2283.. function:: Client(address[, family[, authenticate[, authkey]]])
2284
2285 Attempt to set up a connection to the listener which is using address
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00002286 *address*, returning a :class:`~multiprocessing.Connection`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002287
2288 The type of the connection is determined by *family* argument, but this can
2289 generally be omitted since it can usually be inferred from the format of
2290 *address*. (See :ref:`multiprocessing-address-formats`)
2291
Richard Oudkerk264e9ac2012-08-17 14:39:18 +01002292 If *authenticate* is ``True`` or *authkey* is a byte string then digest
Benjamin Petersone711caf2008-06-11 16:44:04 +00002293 authentication is used. The key used for authentication will be either
Richard Oudkerk264e9ac2012-08-17 14:39:18 +01002294 *authkey* or ``current_process().authkey`` if *authkey* is ``None``.
Eli Benderskyb674dcf2012-07-13 09:45:31 +03002295 If authentication fails then
2296 :exc:`~multiprocessing.AuthenticationError` is raised. See
Benjamin Petersone711caf2008-06-11 16:44:04 +00002297 :ref:`multiprocessing-auth-keys`.
2298
2299.. class:: Listener([address[, family[, backlog[, authenticate[, authkey]]]]])
2300
2301 A wrapper for a bound socket or Windows named pipe which is 'listening' for
2302 connections.
2303
2304 *address* is the address to be used by the bound socket or named pipe of the
2305 listener object.
2306
Benjamin Petersond23f8222009-04-05 19:13:16 +00002307 .. note::
2308
2309 If an address of '0.0.0.0' is used, the address will not be a connectable
2310 end point on Windows. If you require a connectable end-point,
2311 you should use '127.0.0.1'.
2312
Benjamin Petersone711caf2008-06-11 16:44:04 +00002313 *family* is the type of socket (or named pipe) to use. This can be one of
2314 the strings ``'AF_INET'`` (for a TCP socket), ``'AF_UNIX'`` (for a Unix
2315 domain socket) or ``'AF_PIPE'`` (for a Windows named pipe). Of these only
2316 the first is guaranteed to be available. If *family* is ``None`` then the
2317 family is inferred from the format of *address*. If *address* is also
2318 ``None`` then a default is chosen. This default is the family which is
2319 assumed to be the fastest available. See
2320 :ref:`multiprocessing-address-formats`. Note that if *family* is
2321 ``'AF_UNIX'`` and address is ``None`` then the socket will be created in a
2322 private temporary directory created using :func:`tempfile.mkstemp`.
2323
2324 If the listener object uses a socket then *backlog* (1 by default) is passed
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002325 to the :meth:`~socket.socket.listen` method of the socket once it has been
2326 bound.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002327
2328 If *authenticate* is ``True`` (``False`` by default) or *authkey* is not
2329 ``None`` then digest authentication is used.
2330
Richard Oudkerk264e9ac2012-08-17 14:39:18 +01002331 If *authkey* is a byte string then it will be used as the
Serhiy Storchakaecf41da2016-10-19 16:29:26 +03002332 authentication key; otherwise it must be ``None``.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002333
2334 If *authkey* is ``None`` and *authenticate* is ``True`` then
Benjamin Petersona786b022008-08-25 21:05:21 +00002335 ``current_process().authkey`` is used as the authentication key. If
Alexandre Vassalottic57a84f2009-07-17 12:07:01 +00002336 *authkey* is ``None`` and *authenticate* is ``False`` then no
Benjamin Petersone711caf2008-06-11 16:44:04 +00002337 authentication is done. If authentication fails then
Eli Benderskyb674dcf2012-07-13 09:45:31 +03002338 :exc:`~multiprocessing.AuthenticationError` is raised.
2339 See :ref:`multiprocessing-auth-keys`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002340
2341 .. method:: accept()
2342
2343 Accept a connection on the bound socket or named pipe of the listener
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002344 object and return a :class:`~multiprocessing.Connection` object. If
2345 authentication is attempted and fails, then
Eli Benderskyb674dcf2012-07-13 09:45:31 +03002346 :exc:`~multiprocessing.AuthenticationError` is raised.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002347
2348 .. method:: close()
2349
2350 Close the bound socket or named pipe of the listener object. This is
2351 called automatically when the listener is garbage collected. However it
2352 is advisable to call it explicitly.
2353
2354 Listener objects have the following read-only properties:
2355
2356 .. attribute:: address
2357
2358 The address which is being used by the Listener object.
2359
2360 .. attribute:: last_accepted
2361
2362 The address from which the last accepted connection came. If this is
2363 unavailable then it is ``None``.
2364
Richard Oudkerkd69cfe82012-06-18 17:47:52 +01002365 .. versionadded:: 3.3
Serhiy Storchaka14867992014-09-10 23:43:41 +03002366 Listener objects now support the context management protocol -- see
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002367 :ref:`typecontextmanager`. :meth:`~contextmanager.__enter__` returns the
Georg Brandl325a1c22013-10-27 09:16:01 +01002368 listener object, and :meth:`~contextmanager.__exit__` calls :meth:`close`.
Richard Oudkerkd69cfe82012-06-18 17:47:52 +01002369
Antoine Pitroubdb1cf12012-03-05 19:28:37 +01002370.. function:: wait(object_list, timeout=None)
2371
2372 Wait till an object in *object_list* is ready. Returns the list of
2373 those objects in *object_list* which are ready. If *timeout* is a
2374 float then the call blocks for at most that many seconds. If
2375 *timeout* is ``None`` then it will block for an unlimited period.
Richard Oudkerk59d54042012-05-10 16:11:12 +01002376 A negative timeout is equivalent to a zero timeout.
Antoine Pitroubdb1cf12012-03-05 19:28:37 +01002377
2378 For both Unix and Windows, an object can appear in *object_list* if
2379 it is
2380
2381 * a readable :class:`~multiprocessing.Connection` object;
2382 * a connected and readable :class:`socket.socket` object; or
2383 * the :attr:`~multiprocessing.Process.sentinel` attribute of a
2384 :class:`~multiprocessing.Process` object.
2385
2386 A connection or socket object is ready when there is data available
2387 to be read from it, or the other end has been closed.
2388
2389 **Unix**: ``wait(object_list, timeout)`` almost equivalent
2390 ``select.select(object_list, [], [], timeout)``. The difference is
2391 that, if :func:`select.select` is interrupted by a signal, it can
2392 raise :exc:`OSError` with an error number of ``EINTR``, whereas
2393 :func:`wait` will not.
2394
2395 **Windows**: An item in *object_list* must either be an integer
2396 handle which is waitable (according to the definition used by the
2397 documentation of the Win32 function ``WaitForMultipleObjects()``)
2398 or it can be an object with a :meth:`fileno` method which returns a
2399 socket handle or pipe handle. (Note that pipe handles and socket
2400 handles are **not** waitable handles.)
2401
2402 .. versionadded:: 3.3
Benjamin Petersone711caf2008-06-11 16:44:04 +00002403
Benjamin Petersone711caf2008-06-11 16:44:04 +00002404
2405**Examples**
2406
2407The following server code creates a listener which uses ``'secret password'`` as
2408an authentication key. It then waits for a connection and sends some data to
2409the client::
2410
2411 from multiprocessing.connection import Listener
2412 from array import array
2413
2414 address = ('localhost', 6000) # family is deduced to be 'AF_INET'
Benjamin Petersone711caf2008-06-11 16:44:04 +00002415
Richard Oudkerk633c4d92012-06-18 21:29:36 +01002416 with Listener(address, authkey=b'secret password') as listener:
2417 with listener.accept() as conn:
2418 print('connection accepted from', listener.last_accepted)
Benjamin Petersone711caf2008-06-11 16:44:04 +00002419
Richard Oudkerk633c4d92012-06-18 21:29:36 +01002420 conn.send([2.25, None, 'junk', float])
Benjamin Petersone711caf2008-06-11 16:44:04 +00002421
Richard Oudkerk633c4d92012-06-18 21:29:36 +01002422 conn.send_bytes(b'hello')
Benjamin Petersone711caf2008-06-11 16:44:04 +00002423
Richard Oudkerk633c4d92012-06-18 21:29:36 +01002424 conn.send_bytes(array('i', [42, 1729]))
Benjamin Petersone711caf2008-06-11 16:44:04 +00002425
2426The following code connects to the server and receives some data from the
2427server::
2428
2429 from multiprocessing.connection import Client
2430 from array import array
2431
2432 address = ('localhost', 6000)
Benjamin Petersone711caf2008-06-11 16:44:04 +00002433
Richard Oudkerk633c4d92012-06-18 21:29:36 +01002434 with Client(address, authkey=b'secret password') as conn:
2435 print(conn.recv()) # => [2.25, None, 'junk', float]
Benjamin Petersone711caf2008-06-11 16:44:04 +00002436
Richard Oudkerk633c4d92012-06-18 21:29:36 +01002437 print(conn.recv_bytes()) # => 'hello'
Benjamin Petersone711caf2008-06-11 16:44:04 +00002438
Richard Oudkerk633c4d92012-06-18 21:29:36 +01002439 arr = array('i', [0, 0, 0, 0, 0])
2440 print(conn.recv_bytes_into(arr)) # => 8
2441 print(arr) # => array('i', [42, 1729, 0, 0, 0])
Benjamin Petersone711caf2008-06-11 16:44:04 +00002442
Antoine Pitroubdb1cf12012-03-05 19:28:37 +01002443The following code uses :func:`~multiprocessing.connection.wait` to
2444wait for messages from multiple processes at once::
2445
2446 import time, random
2447 from multiprocessing import Process, Pipe, current_process
2448 from multiprocessing.connection import wait
2449
2450 def foo(w):
2451 for i in range(10):
2452 w.send((i, current_process().name))
2453 w.close()
2454
2455 if __name__ == '__main__':
2456 readers = []
2457
2458 for i in range(4):
2459 r, w = Pipe(duplex=False)
2460 readers.append(r)
2461 p = Process(target=foo, args=(w,))
2462 p.start()
2463 # We close the writable end of the pipe now to be sure that
2464 # p is the only process which owns a handle for it. This
2465 # ensures that when p closes its handle for the writable end,
2466 # wait() will promptly report the readable end as being ready.
2467 w.close()
2468
2469 while readers:
2470 for r in wait(readers):
2471 try:
2472 msg = r.recv()
2473 except EOFError:
2474 readers.remove(r)
2475 else:
2476 print(msg)
2477
Benjamin Petersone711caf2008-06-11 16:44:04 +00002478
2479.. _multiprocessing-address-formats:
2480
2481Address Formats
2482>>>>>>>>>>>>>>>
2483
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00002484* An ``'AF_INET'`` address is a tuple of the form ``(hostname, port)`` where
Benjamin Petersone711caf2008-06-11 16:44:04 +00002485 *hostname* is a string and *port* is an integer.
2486
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00002487* An ``'AF_UNIX'`` address is a string representing a filename on the
Benjamin Petersone711caf2008-06-11 16:44:04 +00002488 filesystem.
2489
2490* An ``'AF_PIPE'`` address is a string of the form
Benjamin Petersonda10d3b2009-01-01 00:23:30 +00002491 :samp:`r'\\\\.\\pipe\\{PipeName}'`. To use :func:`Client` to connect to a named
Georg Brandl1f01deb2009-01-03 22:47:39 +00002492 pipe on a remote computer called *ServerName* one should use an address of the
Benjamin Peterson28d88b42009-01-09 03:03:23 +00002493 form :samp:`r'\\\\{ServerName}\\pipe\\{PipeName}'` instead.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002494
2495Note that any string beginning with two backslashes is assumed by default to be
2496an ``'AF_PIPE'`` address rather than an ``'AF_UNIX'`` address.
2497
2498
2499.. _multiprocessing-auth-keys:
2500
2501Authentication keys
2502~~~~~~~~~~~~~~~~~~~
2503
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002504When one uses :meth:`Connection.recv <multiprocessing.Connection.recv>`, the
2505data received is automatically
Benjamin Petersone711caf2008-06-11 16:44:04 +00002506unpickled. Unfortunately unpickling data from an untrusted source is a security
2507risk. Therefore :class:`Listener` and :func:`Client` use the :mod:`hmac` module
2508to provide digest authentication.
2509
Richard Oudkerk264e9ac2012-08-17 14:39:18 +01002510An authentication key is a byte string which can be thought of as a
2511password: once a connection is established both ends will demand proof
2512that the other knows the authentication key. (Demonstrating that both
2513ends are using the same key does **not** involve sending the key over
2514the connection.)
Benjamin Petersone711caf2008-06-11 16:44:04 +00002515
Richard Oudkerk264e9ac2012-08-17 14:39:18 +01002516If authentication is requested but no authentication key is specified then the
Benjamin Petersona786b022008-08-25 21:05:21 +00002517return value of ``current_process().authkey`` is used (see
Martin Panter8d56c022016-05-29 04:13:35 +00002518:class:`~multiprocessing.Process`). This value will be automatically inherited by
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00002519any :class:`~multiprocessing.Process` object that the current process creates.
2520This means that (by default) all processes of a multi-process program will share
2521a single authentication key which can be used when setting up connections
Benjamin Petersond23f8222009-04-05 19:13:16 +00002522between themselves.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002523
2524Suitable authentication keys can also be generated by using :func:`os.urandom`.
2525
2526
2527Logging
2528~~~~~~~
2529
2530Some support for logging is available. Note, however, that the :mod:`logging`
2531package does not use process shared locks so it is possible (depending on the
2532handler type) for messages from different processes to get mixed up.
2533
2534.. currentmodule:: multiprocessing
2535.. function:: get_logger()
2536
2537 Returns the logger used by :mod:`multiprocessing`. If necessary, a new one
2538 will be created.
2539
Jesse Noller41faa542009-01-25 03:45:53 +00002540 When first created the logger has level :data:`logging.NOTSET` and no
2541 default handler. Messages sent to this logger will not by default propagate
2542 to the root logger.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002543
2544 Note that on Windows child processes will only inherit the level of the
2545 parent process's logger -- any other customization of the logger will not be
2546 inherited.
2547
Jesse Noller41faa542009-01-25 03:45:53 +00002548.. currentmodule:: multiprocessing
2549.. function:: log_to_stderr()
2550
2551 This function performs a call to :func:`get_logger` but in addition to
2552 returning the logger created by get_logger, it adds a handler which sends
2553 output to :data:`sys.stderr` using format
2554 ``'[%(levelname)s/%(processName)s] %(message)s'``.
2555
Benjamin Petersone711caf2008-06-11 16:44:04 +00002556Below is an example session with logging turned on::
2557
Benjamin Peterson206e3072008-10-19 14:07:49 +00002558 >>> import multiprocessing, logging
Jesse Noller41faa542009-01-25 03:45:53 +00002559 >>> logger = multiprocessing.log_to_stderr()
Benjamin Petersone711caf2008-06-11 16:44:04 +00002560 >>> logger.setLevel(logging.INFO)
2561 >>> logger.warning('doomed')
2562 [WARNING/MainProcess] doomed
Benjamin Peterson206e3072008-10-19 14:07:49 +00002563 >>> m = multiprocessing.Manager()
R. David Murray8e8099c2009-04-28 18:02:00 +00002564 [INFO/SyncManager-...] child process calling self.run()
2565 [INFO/SyncManager-...] created temp directory /.../pymp-...
2566 [INFO/SyncManager-...] manager serving at '/.../listener-...'
Benjamin Petersone711caf2008-06-11 16:44:04 +00002567 >>> del m
2568 [INFO/MainProcess] sending shutdown message to manager
R. David Murray8e8099c2009-04-28 18:02:00 +00002569 [INFO/SyncManager-...] manager exiting with exitcode 0
Benjamin Petersone711caf2008-06-11 16:44:04 +00002570
Jesse Noller41faa542009-01-25 03:45:53 +00002571For a full table of logging levels, see the :mod:`logging` module.
2572
Benjamin Petersone711caf2008-06-11 16:44:04 +00002573
2574The :mod:`multiprocessing.dummy` module
2575~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2576
2577.. module:: multiprocessing.dummy
2578 :synopsis: Dumb wrapper around threading.
2579
2580:mod:`multiprocessing.dummy` replicates the API of :mod:`multiprocessing` but is
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00002581no more than a wrapper around the :mod:`threading` module.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002582
2583
2584.. _multiprocessing-programming:
2585
2586Programming guidelines
2587----------------------
2588
2589There are certain guidelines and idioms which should be adhered to when using
2590:mod:`multiprocessing`.
2591
2592
Richard Oudkerk84ed9a62013-08-14 15:35:41 +01002593All start methods
2594~~~~~~~~~~~~~~~~~
2595
2596The following applies to all start methods.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002597
2598Avoid shared state
2599
2600 As far as possible one should try to avoid shifting large amounts of data
2601 between processes.
2602
2603 It is probably best to stick to using queues or pipes for communication
2604 between processes rather than using the lower level synchronization
Eli Bendersky78da3bc2012-07-13 10:10:05 +03002605 primitives.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002606
2607Picklability
2608
2609 Ensure that the arguments to the methods of proxies are picklable.
2610
2611Thread safety of proxies
2612
2613 Do not use a proxy object from more than one thread unless you protect it
2614 with a lock.
2615
2616 (There is never a problem with different processes using the *same* proxy.)
2617
2618Joining zombie processes
2619
2620 On Unix when a process finishes but has not been joined it becomes a zombie.
2621 There should never be very many because each time a new process starts (or
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002622 :func:`~multiprocessing.active_children` is called) all completed processes
2623 which have not yet been joined will be joined. Also calling a finished
2624 process's :meth:`Process.is_alive <multiprocessing.Process.is_alive>` will
2625 join the process. Even so it is probably good
Benjamin Petersone711caf2008-06-11 16:44:04 +00002626 practice to explicitly join all the processes that you start.
2627
2628Better to inherit than pickle/unpickle
2629
Richard Oudkerk84ed9a62013-08-14 15:35:41 +01002630 When using the *spawn* or *forkserver* start methods many types
2631 from :mod:`multiprocessing` need to be picklable so that child
2632 processes can use them. However, one should generally avoid
2633 sending shared objects to other processes using pipes or queues.
2634 Instead you should arrange the program so that a process which
2635 needs access to a shared resource created elsewhere can inherit it
2636 from an ancestor process.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002637
2638Avoid terminating processes
2639
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002640 Using the :meth:`Process.terminate <multiprocessing.Process.terminate>`
2641 method to stop a process is liable to
Benjamin Petersone711caf2008-06-11 16:44:04 +00002642 cause any shared resources (such as locks, semaphores, pipes and queues)
2643 currently being used by the process to become broken or unavailable to other
2644 processes.
2645
2646 Therefore it is probably best to only consider using
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002647 :meth:`Process.terminate <multiprocessing.Process.terminate>` on processes
2648 which never use any shared resources.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002649
2650Joining processes that use queues
2651
2652 Bear in mind that a process that has put items in a queue will wait before
2653 terminating until all the buffered items are fed by the "feeder" thread to
2654 the underlying pipe. (The child process can call the
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002655 :meth:`Queue.cancel_join_thread <multiprocessing.Queue.cancel_join_thread>`
2656 method of the queue to avoid this behaviour.)
Benjamin Petersone711caf2008-06-11 16:44:04 +00002657
2658 This means that whenever you use a queue you need to make sure that all
2659 items which have been put on the queue will eventually be removed before the
2660 process is joined. Otherwise you cannot be sure that processes which have
2661 put items on the queue will terminate. Remember also that non-daemonic
Zachary Ware72805612014-10-03 10:55:12 -05002662 processes will be joined automatically.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002663
2664 An example which will deadlock is the following::
2665
2666 from multiprocessing import Process, Queue
2667
2668 def f(q):
2669 q.put('X' * 1000000)
2670
2671 if __name__ == '__main__':
2672 queue = Queue()
2673 p = Process(target=f, args=(queue,))
2674 p.start()
2675 p.join() # this deadlocks
2676 obj = queue.get()
2677
Zachary Ware72805612014-10-03 10:55:12 -05002678 A fix here would be to swap the last two lines (or simply remove the
Benjamin Petersone711caf2008-06-11 16:44:04 +00002679 ``p.join()`` line).
2680
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00002681Explicitly pass resources to child processes
Benjamin Petersone711caf2008-06-11 16:44:04 +00002682
Richard Oudkerk84ed9a62013-08-14 15:35:41 +01002683 On Unix using the *fork* start method, a child process can make
2684 use of a shared resource created in a parent process using a
2685 global resource. However, it is better to pass the object as an
2686 argument to the constructor for the child process.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002687
Richard Oudkerk84ed9a62013-08-14 15:35:41 +01002688 Apart from making the code (potentially) compatible with Windows
2689 and the other start methods this also ensures that as long as the
2690 child process is still alive the object will not be garbage
2691 collected in the parent process. This might be important if some
2692 resource is freed when the object is garbage collected in the
2693 parent process.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002694
2695 So for instance ::
2696
2697 from multiprocessing import Process, Lock
2698
2699 def f():
2700 ... do something using "lock" ...
2701
2702 if __name__ == '__main__':
Serhiy Storchakadba90392016-05-10 12:01:23 +03002703 lock = Lock()
2704 for i in range(10):
Benjamin Petersone711caf2008-06-11 16:44:04 +00002705 Process(target=f).start()
2706
2707 should be rewritten as ::
2708
2709 from multiprocessing import Process, Lock
2710
2711 def f(l):
2712 ... do something using "l" ...
2713
2714 if __name__ == '__main__':
Serhiy Storchakadba90392016-05-10 12:01:23 +03002715 lock = Lock()
2716 for i in range(10):
Benjamin Petersone711caf2008-06-11 16:44:04 +00002717 Process(target=f, args=(lock,)).start()
2718
Eli Benderskyd08effe2011-12-31 07:20:26 +02002719Beware of replacing :data:`sys.stdin` with a "file like object"
Alexandre Vassalottic57a84f2009-07-17 12:07:01 +00002720
2721 :mod:`multiprocessing` originally unconditionally called::
2722
2723 os.close(sys.stdin.fileno())
2724
2725 in the :meth:`multiprocessing.Process._bootstrap` method --- this resulted
2726 in issues with processes-in-processes. This has been changed to::
2727
2728 sys.stdin.close()
Victor Stinnera6d865c2016-03-25 09:29:50 +01002729 sys.stdin = open(os.open(os.devnull, os.O_RDONLY), closefd=False)
Alexandre Vassalottic57a84f2009-07-17 12:07:01 +00002730
2731 Which solves the fundamental issue of processes colliding with each other
2732 resulting in a bad file descriptor error, but introduces a potential danger
2733 to applications which replace :func:`sys.stdin` with a "file-like object"
2734 with output buffering. This danger is that if multiple processes call
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002735 :meth:`~io.IOBase.close()` on this file-like object, it could result in the same
Alexandre Vassalottic57a84f2009-07-17 12:07:01 +00002736 data being flushed to the object multiple times, resulting in corruption.
2737
2738 If you write a file-like object and implement your own caching, you can
2739 make it fork-safe by storing the pid whenever you append to the cache,
2740 and discarding the cache when the pid changes. For example::
2741
2742 @property
2743 def cache(self):
2744 pid = os.getpid()
2745 if pid != self._pid:
2746 self._pid = pid
2747 self._cache = []
2748 return self._cache
2749
2750 For more information, see :issue:`5155`, :issue:`5313` and :issue:`5331`
Benjamin Petersone711caf2008-06-11 16:44:04 +00002751
Richard Oudkerk84ed9a62013-08-14 15:35:41 +01002752The *spawn* and *forkserver* start methods
2753~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Benjamin Petersone711caf2008-06-11 16:44:04 +00002754
Richard Oudkerk84ed9a62013-08-14 15:35:41 +01002755There are a few extra restriction which don't apply to the *fork*
2756start method.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002757
2758More picklability
2759
Berker Peksag0b19e1e2016-06-12 12:19:13 +03002760 Ensure that all arguments to :meth:`Process.__init__` are picklable.
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002761 Also, if you subclass :class:`~multiprocessing.Process` then make sure that
2762 instances will be picklable when the :meth:`Process.start
2763 <multiprocessing.Process.start>` method is called.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002764
2765Global variables
2766
2767 Bear in mind that if code run in a child process tries to access a global
2768 variable, then the value it sees (if any) may not be the same as the value
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002769 in the parent process at the time that :meth:`Process.start
2770 <multiprocessing.Process.start>` was called.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002771
2772 However, global variables which are just module level constants cause no
2773 problems.
2774
2775Safe importing of main module
2776
2777 Make sure that the main module can be safely imported by a new Python
2778 interpreter without causing unintended side effects (such a starting a new
2779 process).
2780
Richard Oudkerk84ed9a62013-08-14 15:35:41 +01002781 For example, using the *spawn* or *forkserver* start method
2782 running the following module would fail with a
Benjamin Petersone711caf2008-06-11 16:44:04 +00002783 :exc:`RuntimeError`::
2784
2785 from multiprocessing import Process
2786
2787 def foo():
Georg Brandl49702152008-09-29 06:43:45 +00002788 print('hello')
Benjamin Petersone711caf2008-06-11 16:44:04 +00002789
2790 p = Process(target=foo)
2791 p.start()
2792
2793 Instead one should protect the "entry point" of the program by using ``if
2794 __name__ == '__main__':`` as follows::
2795
Richard Oudkerk84ed9a62013-08-14 15:35:41 +01002796 from multiprocessing import Process, freeze_support, set_start_method
Benjamin Petersone711caf2008-06-11 16:44:04 +00002797
2798 def foo():
Georg Brandl49702152008-09-29 06:43:45 +00002799 print('hello')
Benjamin Petersone711caf2008-06-11 16:44:04 +00002800
2801 if __name__ == '__main__':
2802 freeze_support()
Richard Oudkerk84ed9a62013-08-14 15:35:41 +01002803 set_start_method('spawn')
Benjamin Petersone711caf2008-06-11 16:44:04 +00002804 p = Process(target=foo)
2805 p.start()
2806
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00002807 (The ``freeze_support()`` line can be omitted if the program will be run
Benjamin Petersone711caf2008-06-11 16:44:04 +00002808 normally instead of frozen.)
2809
2810 This allows the newly spawned Python interpreter to safely import the module
2811 and then run the module's ``foo()`` function.
2812
2813 Similar restrictions apply if a pool or manager is created in the main
2814 module.
2815
2816
2817.. _multiprocessing-examples:
2818
2819Examples
2820--------
2821
2822Demonstration of how to create and use customized managers and proxies:
2823
2824.. literalinclude:: ../includes/mp_newtype.py
Ezio Melottif86b28e2012-04-13 20:50:48 -06002825 :language: python3
Benjamin Petersone711caf2008-06-11 16:44:04 +00002826
2827
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002828Using :class:`~multiprocessing.pool.Pool`:
Benjamin Petersone711caf2008-06-11 16:44:04 +00002829
2830.. literalinclude:: ../includes/mp_pool.py
Ezio Melottif86b28e2012-04-13 20:50:48 -06002831 :language: python3
Benjamin Petersone711caf2008-06-11 16:44:04 +00002832
2833
Georg Brandl0b37b332010-09-03 22:49:27 +00002834An example showing how to use queues to feed tasks to a collection of worker
Eli Benderskyd08effe2011-12-31 07:20:26 +02002835processes and collect the results:
Benjamin Petersone711caf2008-06-11 16:44:04 +00002836
2837.. literalinclude:: ../includes/mp_workers.py