blob: c6ffb00819c32cdfc4fd00a0ce3edd5fcee5468d [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
Pierre Glaser50466c62019-05-13 19:20:48 +0200134start a *resource tracker* process which tracks the unlinked named
135system resources (such as named semaphores or
136:class:`~multiprocessing.shared_memory.SharedMemory` objects) created
137by processes of the program. When all processes
138have exited the resource tracker unlinks any remaining tracked object.
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100139Usually there should be none, but if a process was killed by a signal
Pierre Glaser50466c62019-05-13 19:20:48 +0200140there may be some "leaked" resources. (Neither leaked semaphores nor shared
141memory segments will be automatically unlinked until the next reboot. This is
142problematic for both objects because the system allows only a limited number of
143named semaphores, and shared memory segments occupy some space in the main
144memory.)
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100145
R David Murrayac186222013-12-20 17:23:57 -0500146To select a start method you use the :func:`set_start_method` in
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100147the ``if __name__ == '__main__'`` clause of the main module. For
148example::
149
150 import multiprocessing as mp
151
Richard Oudkerkb1694cf2013-10-16 16:41:56 +0100152 def foo(q):
153 q.put('hello')
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100154
155 if __name__ == '__main__':
156 mp.set_start_method('spawn')
Richard Oudkerkb1694cf2013-10-16 16:41:56 +0100157 q = mp.Queue()
158 p = mp.Process(target=foo, args=(q,))
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100159 p.start()
Richard Oudkerkb1694cf2013-10-16 16:41:56 +0100160 print(q.get())
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100161 p.join()
162
163:func:`set_start_method` should not be used more than once in the
164program.
165
Richard Oudkerkb1694cf2013-10-16 16:41:56 +0100166Alternatively, you can use :func:`get_context` to obtain a context
167object. Context objects have the same API as the multiprocessing
168module, and allow one to use multiple start methods in the same
169program. ::
170
171 import multiprocessing as mp
172
173 def foo(q):
174 q.put('hello')
175
176 if __name__ == '__main__':
177 ctx = mp.get_context('spawn')
178 q = ctx.Queue()
179 p = ctx.Process(target=foo, args=(q,))
180 p.start()
181 print(q.get())
182 p.join()
183
184Note that objects related to one context may not be compatible with
185processes for a different context. In particular, locks created using
Sylvain Bellemare5619ab22017-03-24 09:26:07 +0100186the *fork* context cannot be passed to processes started using the
Richard Oudkerkb1694cf2013-10-16 16:41:56 +0100187*spawn* or *forkserver* start methods.
188
189A library which wants to use a particular start method should probably
190use :func:`get_context` to avoid interfering with the choice of the
191library user.
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100192
Bo Baylesbab4bbb2019-01-10 11:51:28 -0600193.. warning::
194
195 The ``'spawn'`` and ``'forkserver'`` start methods cannot currently
196 be used with "frozen" executables (i.e., binaries produced by
197 packages like **PyInstaller** and **cx_Freeze**) on Unix.
198 The ``'fork'`` start method does work.
199
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100200
Benjamin Petersone711caf2008-06-11 16:44:04 +0000201Exchanging objects between processes
202~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
203
204:mod:`multiprocessing` supports two types of communication channel between
205processes:
206
207**Queues**
208
Benjamin Peterson257060a2008-06-28 01:42:41 +0000209 The :class:`Queue` class is a near clone of :class:`queue.Queue`. For
Benjamin Petersone711caf2008-06-11 16:44:04 +0000210 example::
211
212 from multiprocessing import Process, Queue
213
214 def f(q):
215 q.put([42, None, 'hello'])
216
Georg Brandl1f01deb2009-01-03 22:47:39 +0000217 if __name__ == '__main__':
218 q = Queue()
219 p = Process(target=f, args=(q,))
220 p.start()
221 print(q.get()) # prints "[42, None, 'hello']"
222 p.join()
Benjamin Petersone711caf2008-06-11 16:44:04 +0000223
Antoine Pitroufc6accc2012-05-18 13:57:04 +0200224 Queues are thread and process safe.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000225
226**Pipes**
227
228 The :func:`Pipe` function returns a pair of connection objects connected by a
229 pipe which by default is duplex (two-way). For example::
230
231 from multiprocessing import Process, Pipe
232
233 def f(conn):
234 conn.send([42, None, 'hello'])
235 conn.close()
236
237 if __name__ == '__main__':
238 parent_conn, child_conn = Pipe()
239 p = Process(target=f, args=(child_conn,))
240 p.start()
Georg Brandl49702152008-09-29 06:43:45 +0000241 print(parent_conn.recv()) # prints "[42, None, 'hello']"
Benjamin Petersone711caf2008-06-11 16:44:04 +0000242 p.join()
243
244 The two connection objects returned by :func:`Pipe` represent the two ends of
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000245 the pipe. Each connection object has :meth:`~Connection.send` and
246 :meth:`~Connection.recv` methods (among others). Note that data in a pipe
247 may become corrupted if two processes (or threads) try to read from or write
248 to the *same* end of the pipe at the same time. Of course there is no risk
249 of corruption from processes using different ends of the pipe at the same
250 time.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000251
252
253Synchronization between processes
254~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
255
256:mod:`multiprocessing` contains equivalents of all the synchronization
257primitives from :mod:`threading`. For instance one can use a lock to ensure
258that only one process prints to standard output at a time::
259
260 from multiprocessing import Process, Lock
261
262 def f(l, i):
263 l.acquire()
Andrew Svetlovee750d82014-07-02 07:21:03 +0300264 try:
265 print('hello world', i)
266 finally:
267 l.release()
Benjamin Petersone711caf2008-06-11 16:44:04 +0000268
269 if __name__ == '__main__':
270 lock = Lock()
271
272 for num in range(10):
273 Process(target=f, args=(lock, num)).start()
274
275Without using the lock output from the different processes is liable to get all
276mixed up.
277
278
279Sharing state between processes
280~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
281
282As mentioned above, when doing concurrent programming it is usually best to
283avoid using shared state as far as possible. This is particularly true when
284using multiple processes.
285
286However, if you really do need to use some shared data then
287:mod:`multiprocessing` provides a couple of ways of doing so.
288
289**Shared memory**
290
291 Data can be stored in a shared memory map using :class:`Value` or
292 :class:`Array`. For example, the following code ::
293
294 from multiprocessing import Process, Value, Array
295
296 def f(n, a):
297 n.value = 3.1415927
298 for i in range(len(a)):
299 a[i] = -a[i]
300
301 if __name__ == '__main__':
302 num = Value('d', 0.0)
303 arr = Array('i', range(10))
304
305 p = Process(target=f, args=(num, arr))
306 p.start()
307 p.join()
308
Georg Brandl49702152008-09-29 06:43:45 +0000309 print(num.value)
310 print(arr[:])
Benjamin Petersone711caf2008-06-11 16:44:04 +0000311
312 will print ::
313
314 3.1415927
315 [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
316
317 The ``'d'`` and ``'i'`` arguments used when creating ``num`` and ``arr`` are
318 typecodes of the kind used by the :mod:`array` module: ``'d'`` indicates a
Georg Brandl2ee470f2008-07-16 12:55:28 +0000319 double precision float and ``'i'`` indicates a signed integer. These shared
Georg Brandlf285bcc2010-10-19 21:07:16 +0000320 objects will be process and thread-safe.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000321
322 For more flexibility in using shared memory one can use the
323 :mod:`multiprocessing.sharedctypes` module which supports the creation of
324 arbitrary ctypes objects allocated from shared memory.
325
326**Server process**
327
328 A manager object returned by :func:`Manager` controls a server process which
Georg Brandl2ee470f2008-07-16 12:55:28 +0000329 holds Python objects and allows other processes to manipulate them using
Benjamin Petersone711caf2008-06-11 16:44:04 +0000330 proxies.
331
Richard Oudkerk3730a172012-06-15 18:26:07 +0100332 A manager returned by :func:`Manager` will support types
Senthil Kumaran6a0514e2016-01-20 03:10:13 -0800333 :class:`list`, :class:`dict`, :class:`~managers.Namespace`, :class:`Lock`,
Richard Oudkerk3730a172012-06-15 18:26:07 +0100334 :class:`RLock`, :class:`Semaphore`, :class:`BoundedSemaphore`,
335 :class:`Condition`, :class:`Event`, :class:`Barrier`,
336 :class:`Queue`, :class:`Value` and :class:`Array`. For example, ::
Benjamin Petersone711caf2008-06-11 16:44:04 +0000337
338 from multiprocessing import Process, Manager
339
340 def f(d, l):
341 d[1] = '1'
342 d['2'] = 2
343 d[0.25] = None
344 l.reverse()
345
346 if __name__ == '__main__':
Richard Oudkerk633c4d92012-06-18 21:29:36 +0100347 with Manager() as manager:
348 d = manager.dict()
349 l = manager.list(range(10))
Benjamin Petersone711caf2008-06-11 16:44:04 +0000350
Richard Oudkerk633c4d92012-06-18 21:29:36 +0100351 p = Process(target=f, args=(d, l))
352 p.start()
353 p.join()
Benjamin Petersone711caf2008-06-11 16:44:04 +0000354
Richard Oudkerk633c4d92012-06-18 21:29:36 +0100355 print(d)
356 print(l)
Benjamin Petersone711caf2008-06-11 16:44:04 +0000357
358 will print ::
359
360 {0.25: None, 1: '1', '2': 2}
361 [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
362
363 Server process managers are more flexible than using shared memory objects
364 because they can be made to support arbitrary object types. Also, a single
365 manager can be shared by processes on different computers over a network.
366 They are, however, slower than using shared memory.
367
368
369Using a pool of workers
370~~~~~~~~~~~~~~~~~~~~~~~
371
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000372The :class:`~multiprocessing.pool.Pool` class represents a pool of worker
Benjamin Petersone711caf2008-06-11 16:44:04 +0000373processes. It has methods which allows tasks to be offloaded to the worker
374processes in a few different ways.
375
376For example::
377
Berker Peksag7405c162016-01-21 23:59:49 +0200378 from multiprocessing import Pool, TimeoutError
379 import time
380 import os
Benjamin Petersone711caf2008-06-11 16:44:04 +0000381
382 def f(x):
383 return x*x
384
385 if __name__ == '__main__':
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100386 # start 4 worker processes
387 with Pool(processes=4) as pool:
388
389 # print "[0, 1, 4,..., 81]"
390 print(pool.map(f, range(10)))
391
392 # print same numbers in arbitrary order
393 for i in pool.imap_unordered(f, range(10)):
394 print(i)
395
Berker Peksag7405c162016-01-21 23:59:49 +0200396 # evaluate "f(20)" asynchronously
397 res = pool.apply_async(f, (20,)) # runs in *only* one process
398 print(res.get(timeout=1)) # prints "400"
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100399
Berker Peksag7405c162016-01-21 23:59:49 +0200400 # evaluate "os.getpid()" asynchronously
401 res = pool.apply_async(os.getpid, ()) # runs in *only* one process
402 print(res.get(timeout=1)) # prints the PID of that process
403
404 # launching multiple evaluations asynchronously *may* use more processes
405 multiple_results = [pool.apply_async(os.getpid, ()) for i in range(4)]
406 print([res.get(timeout=1) for res in multiple_results])
407
408 # make a single worker sleep for 10 secs
409 res = pool.apply_async(time.sleep, (10,))
410 try:
411 print(res.get(timeout=1))
412 except TimeoutError:
413 print("We lacked patience and got a multiprocessing.TimeoutError")
414
415 print("For the moment, the pool remains available for more work")
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100416
417 # exiting the 'with'-block has stopped the pool
Berker Peksag7405c162016-01-21 23:59:49 +0200418 print("Now the pool is closed and no longer available")
Benjamin Petersone711caf2008-06-11 16:44:04 +0000419
Richard Oudkerkb3c4b982013-07-02 12:32:00 +0100420Note that the methods of a pool should only ever be used by the
421process which created it.
422
Antoine Pitrou73dd0302015-01-11 15:05:29 +0100423.. note::
424
425 Functionality within this package requires that the ``__main__`` module be
426 importable by the children. This is covered in :ref:`multiprocessing-programming`
427 however it is worth pointing out here. This means that some examples, such
428 as the :class:`multiprocessing.pool.Pool` examples will not work in the
429 interactive interpreter. For example::
430
431 >>> from multiprocessing import Pool
432 >>> p = Pool(5)
433 >>> def f(x):
434 ... return x*x
435 ...
436 >>> p.map(f, [1,2,3])
437 Process PoolWorker-1:
438 Process PoolWorker-2:
439 Process PoolWorker-3:
440 Traceback (most recent call last):
441 Traceback (most recent call last):
442 Traceback (most recent call last):
443 AttributeError: 'module' object has no attribute 'f'
444 AttributeError: 'module' object has no attribute 'f'
445 AttributeError: 'module' object has no attribute 'f'
446
447 (If you try this it will actually output three full tracebacks
448 interleaved in a semi-random fashion, and then you may have to
Victor Stinner5e922652018-09-07 17:30:33 +0200449 stop the parent process somehow.)
Antoine Pitrou73dd0302015-01-11 15:05:29 +0100450
Benjamin Petersone711caf2008-06-11 16:44:04 +0000451
452Reference
453---------
454
455The :mod:`multiprocessing` package mostly replicates the API of the
456:mod:`threading` module.
457
458
459:class:`Process` and exceptions
460~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
461
Ezio Melotti8429b672012-09-14 06:35:09 +0300462.. class:: Process(group=None, target=None, name=None, args=(), kwargs={}, \
463 *, daemon=None)
Benjamin Petersone711caf2008-06-11 16:44:04 +0000464
465 Process objects represent activity that is run in a separate process. The
466 :class:`Process` class has equivalents of all the methods of
467 :class:`threading.Thread`.
468
469 The constructor should always be called with keyword arguments. *group*
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000470 should always be ``None``; it exists solely for compatibility with
Benjamin Petersona786b022008-08-25 21:05:21 +0000471 :class:`threading.Thread`. *target* is the callable object to be invoked by
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000472 the :meth:`run()` method. It defaults to ``None``, meaning nothing is
Eli Benderskyb674dcf2012-07-13 09:45:31 +0300473 called. *name* is the process name (see :attr:`name` for more details).
474 *args* is the argument tuple for the target invocation. *kwargs* is a
475 dictionary of keyword arguments for the target invocation. If provided,
476 the keyword-only *daemon* argument sets the process :attr:`daemon` flag
477 to ``True`` or ``False``. If ``None`` (the default), this flag will be
478 inherited from the creating process.
Antoine Pitrou0bd4deb2011-02-25 22:07:43 +0000479
480 By default, no arguments are passed to *target*.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000481
482 If a subclass overrides the constructor, it must make sure it invokes the
483 base class constructor (:meth:`Process.__init__`) before doing anything else
484 to the process.
485
Antoine Pitrou0bd4deb2011-02-25 22:07:43 +0000486 .. versionchanged:: 3.3
487 Added the *daemon* argument.
488
Benjamin Petersone711caf2008-06-11 16:44:04 +0000489 .. method:: run()
490
491 Method representing the process's activity.
492
493 You may override this method in a subclass. The standard :meth:`run`
494 method invokes the callable object passed to the object's constructor as
495 the target argument, if any, with sequential and keyword arguments taken
496 from the *args* and *kwargs* arguments, respectively.
497
498 .. method:: start()
499
500 Start the process's activity.
501
502 This must be called at most once per process object. It arranges for the
503 object's :meth:`run` method to be invoked in a separate process.
504
505 .. method:: join([timeout])
506
Charles-François Nataliacd9f7c2011-07-25 18:35:49 +0200507 If the optional argument *timeout* is ``None`` (the default), the method
508 blocks until the process whose :meth:`join` method is called terminates.
509 If *timeout* is a positive number, it blocks at most *timeout* seconds.
Berker Peksaga24d2d82016-09-26 23:22:22 +0300510 Note that the method returns ``None`` if its process terminates or if the
511 method times out. Check the process's :attr:`exitcode` to determine if
512 it terminated.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000513
514 A process can be joined many times.
515
516 A process cannot join itself because this would cause a deadlock. It is
517 an error to attempt to join a process before it has been started.
518
Benjamin Petersona786b022008-08-25 21:05:21 +0000519 .. attribute:: name
Benjamin Petersone711caf2008-06-11 16:44:04 +0000520
Eli Benderskyb674dcf2012-07-13 09:45:31 +0300521 The process's name. The name is a string used for identification purposes
522 only. It has no semantics. Multiple processes may be given the same
523 name.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000524
Eli Benderskyb674dcf2012-07-13 09:45:31 +0300525 The initial name is set by the constructor. If no explicit name is
526 provided to the constructor, a name of the form
527 'Process-N\ :sub:`1`:N\ :sub:`2`:...:N\ :sub:`k`' is constructed, where
528 each N\ :sub:`k` is the N-th child of its parent.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000529
Jesse Noller45239682008-11-28 18:46:19 +0000530 .. method:: is_alive
Benjamin Petersone711caf2008-06-11 16:44:04 +0000531
532 Return whether the process is alive.
533
534 Roughly, a process object is alive from the moment the :meth:`start`
535 method returns until the child process terminates.
536
Benjamin Petersona786b022008-08-25 21:05:21 +0000537 .. attribute:: daemon
Benjamin Petersone711caf2008-06-11 16:44:04 +0000538
Benjamin Petersonda10d3b2009-01-01 00:23:30 +0000539 The process's daemon flag, a Boolean value. This must be set before
Benjamin Petersona786b022008-08-25 21:05:21 +0000540 :meth:`start` is called.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000541
542 The initial value is inherited from the creating process.
543
544 When a process exits, it attempts to terminate all of its daemonic child
545 processes.
546
547 Note that a daemonic process is not allowed to create child processes.
548 Otherwise a daemonic process would leave its children orphaned if it gets
Alexandre Vassalotti260484d2009-07-17 11:43:26 +0000549 terminated when its parent process exits. Additionally, these are **not**
550 Unix daemons or services, they are normal processes that will be
Georg Brandl6faee4e2010-09-21 14:48:28 +0000551 terminated (and not joined) if non-daemonic processes have exited.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000552
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +0300553 In addition to the :class:`threading.Thread` API, :class:`Process` objects
Benjamin Petersona786b022008-08-25 21:05:21 +0000554 also support the following attributes and methods:
Benjamin Petersone711caf2008-06-11 16:44:04 +0000555
Benjamin Petersona786b022008-08-25 21:05:21 +0000556 .. attribute:: pid
Benjamin Petersone711caf2008-06-11 16:44:04 +0000557
558 Return the process ID. Before the process is spawned, this will be
559 ``None``.
560
Benjamin Petersona786b022008-08-25 21:05:21 +0000561 .. attribute:: exitcode
Benjamin Petersone711caf2008-06-11 16:44:04 +0000562
Benjamin Petersona786b022008-08-25 21:05:21 +0000563 The child's exit code. This will be ``None`` if the process has not yet
564 terminated. A negative value *-N* indicates that the child was terminated
565 by signal *N*.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000566
Benjamin Petersona786b022008-08-25 21:05:21 +0000567 .. attribute:: authkey
Benjamin Petersone711caf2008-06-11 16:44:04 +0000568
Benjamin Petersona786b022008-08-25 21:05:21 +0000569 The process's authentication key (a byte string).
Benjamin Petersone711caf2008-06-11 16:44:04 +0000570
571 When :mod:`multiprocessing` is initialized the main process is assigned a
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +0300572 random string using :func:`os.urandom`.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000573
574 When a :class:`Process` object is created, it will inherit the
Benjamin Petersona786b022008-08-25 21:05:21 +0000575 authentication key of its parent process, although this may be changed by
576 setting :attr:`authkey` to another byte string.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000577
578 See :ref:`multiprocessing-auth-keys`.
579
Antoine Pitrou176f07d2011-06-06 19:35:31 +0200580 .. attribute:: sentinel
581
582 A numeric handle of a system object which will become "ready" when
583 the process ends.
584
Antoine Pitroubdb1cf12012-03-05 19:28:37 +0100585 You can use this value if you want to wait on several events at
586 once using :func:`multiprocessing.connection.wait`. Otherwise
587 calling :meth:`join()` is simpler.
588
Antoine Pitrou176f07d2011-06-06 19:35:31 +0200589 On Windows, this is an OS handle usable with the ``WaitForSingleObject``
590 and ``WaitForMultipleObjects`` family of API calls. On Unix, this is
591 a file descriptor usable with primitives from the :mod:`select` module.
592
Antoine Pitrou176f07d2011-06-06 19:35:31 +0200593 .. versionadded:: 3.3
594
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000595 .. method:: terminate()
Benjamin Petersone711caf2008-06-11 16:44:04 +0000596
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000597 Terminate the process. On Unix this is done using the ``SIGTERM`` signal;
Georg Brandl60203b42010-10-06 10:11:56 +0000598 on Windows :c:func:`TerminateProcess` is used. Note that exit handlers and
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000599 finally clauses, etc., will not be executed.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000600
601 Note that descendant processes of the process will *not* be terminated --
602 they will simply become orphaned.
603
604 .. warning::
605
606 If this method is used when the associated process is using a pipe or
607 queue then the pipe or queue is liable to become corrupted and may
608 become unusable by other process. Similarly, if the process has
609 acquired a lock or semaphore etc. then terminating it is liable to
610 cause other processes to deadlock.
611
Vitor Pereiraba75af72017-07-18 16:34:23 +0100612 .. method:: kill()
613
614 Same as :meth:`terminate()` but using the ``SIGKILL`` signal on Unix.
615
616 .. versionadded:: 3.7
617
Antoine Pitrou13e96cc2017-06-24 19:22:23 +0200618 .. method:: close()
619
620 Close the :class:`Process` object, releasing all resources associated
621 with it. :exc:`ValueError` is raised if the underlying process
622 is still running. Once :meth:`close` returns successfully, most
623 other methods and attributes of the :class:`Process` object will
624 raise :exc:`ValueError`.
625
626 .. versionadded:: 3.7
627
Ask Solemff7ffdd2010-11-09 21:52:33 +0000628 Note that the :meth:`start`, :meth:`join`, :meth:`is_alive`,
Richard Oudkerk64c25b42013-06-24 15:42:00 +0100629 :meth:`terminate` and :attr:`exitcode` methods should only be called by
Ask Solemff7ffdd2010-11-09 21:52:33 +0000630 the process that created the process object.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000631
R. David Murray8e8099c2009-04-28 18:02:00 +0000632 Example usage of some of the methods of :class:`Process`:
633
634 .. doctest::
Stéphane Wirtel859c0682018-10-12 09:51:05 +0200635 :options: +ELLIPSIS
Benjamin Petersone711caf2008-06-11 16:44:04 +0000636
Benjamin Peterson206e3072008-10-19 14:07:49 +0000637 >>> import multiprocessing, time, signal
638 >>> p = multiprocessing.Process(target=time.sleep, args=(1000,))
Georg Brandl49702152008-09-29 06:43:45 +0000639 >>> print(p, p.is_alive())
Victor Stinner7acd50a2018-12-14 12:58:52 +0100640 <Process ... initial> False
Benjamin Petersone711caf2008-06-11 16:44:04 +0000641 >>> p.start()
Georg Brandl49702152008-09-29 06:43:45 +0000642 >>> print(p, p.is_alive())
Victor Stinner7acd50a2018-12-14 12:58:52 +0100643 <Process ... started> True
Benjamin Petersone711caf2008-06-11 16:44:04 +0000644 >>> p.terminate()
R. David Murray8e8099c2009-04-28 18:02:00 +0000645 >>> time.sleep(0.1)
Georg Brandl49702152008-09-29 06:43:45 +0000646 >>> print(p, p.is_alive())
Victor Stinner7acd50a2018-12-14 12:58:52 +0100647 <Process ... stopped exitcode=-SIGTERM> False
Benjamin Petersona786b022008-08-25 21:05:21 +0000648 >>> p.exitcode == -signal.SIGTERM
Benjamin Petersone711caf2008-06-11 16:44:04 +0000649 True
650
Eli Benderskyb674dcf2012-07-13 09:45:31 +0300651.. exception:: ProcessError
652
653 The base class of all :mod:`multiprocessing` exceptions.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000654
655.. exception:: BufferTooShort
656
657 Exception raised by :meth:`Connection.recv_bytes_into()` when the supplied
658 buffer object is too small for the message read.
659
660 If ``e`` is an instance of :exc:`BufferTooShort` then ``e.args[0]`` will give
661 the message as a byte string.
662
Eli Benderskyb674dcf2012-07-13 09:45:31 +0300663.. exception:: AuthenticationError
664
665 Raised when there is an authentication error.
666
667.. exception:: TimeoutError
668
669 Raised by methods with a timeout when the timeout expires.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000670
671Pipes and Queues
672~~~~~~~~~~~~~~~~
673
674When using multiple processes, one generally uses message passing for
675communication between processes and avoids having to use any synchronization
676primitives like locks.
677
678For passing messages one can use :func:`Pipe` (for a connection between two
679processes) or a queue (which allows multiple producers and consumers).
680
Serhiy Storchaka4ecfa452016-05-16 09:31:54 +0300681The :class:`Queue`, :class:`SimpleQueue` and :class:`JoinableQueue` types
682are multi-producer, multi-consumer :abbr:`FIFO (first-in, first-out)`
683queues modelled on the :class:`queue.Queue` class in the
Benjamin Petersone711caf2008-06-11 16:44:04 +0000684standard library. They differ in that :class:`Queue` lacks the
Benjamin Peterson257060a2008-06-28 01:42:41 +0000685:meth:`~queue.Queue.task_done` and :meth:`~queue.Queue.join` methods introduced
686into Python 2.5's :class:`queue.Queue` class.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000687
688If you use :class:`JoinableQueue` then you **must** call
689:meth:`JoinableQueue.task_done` for each task removed from the queue or else the
Eli Benderskyd08effe2011-12-31 07:20:26 +0200690semaphore used to count the number of unfinished tasks may eventually overflow,
Benjamin Petersone711caf2008-06-11 16:44:04 +0000691raising an exception.
692
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000693Note that one can also create a shared queue by using a manager object -- see
694:ref:`multiprocessing-managers`.
695
Benjamin Petersone711caf2008-06-11 16:44:04 +0000696.. note::
697
Benjamin Peterson257060a2008-06-28 01:42:41 +0000698 :mod:`multiprocessing` uses the usual :exc:`queue.Empty` and
699 :exc:`queue.Full` exceptions to signal a timeout. They are not available in
Benjamin Petersone711caf2008-06-11 16:44:04 +0000700 the :mod:`multiprocessing` namespace so you need to import them from
Benjamin Peterson257060a2008-06-28 01:42:41 +0000701 :mod:`queue`.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000702
Richard Oudkerk95fe1a72013-06-24 14:48:07 +0100703.. note::
704
705 When an object is put on a queue, the object is pickled and a
706 background thread later flushes the pickled data to an underlying
707 pipe. This has some consequences which are a little surprising,
Richard Oudkerk7b69da72013-06-24 18:12:57 +0100708 but should not cause any practical difficulties -- if they really
709 bother you then you can instead use a queue created with a
710 :ref:`manager <multiprocessing-managers>`.
Richard Oudkerk95fe1a72013-06-24 14:48:07 +0100711
712 (1) After putting an object on an empty queue there may be an
Richard Oudkerk2b310dd2013-06-24 20:38:46 +0100713 infinitesimal delay before the queue's :meth:`~Queue.empty`
Richard Oudkerk95fe1a72013-06-24 14:48:07 +0100714 method returns :const:`False` and :meth:`~Queue.get_nowait` can
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +0300715 return without raising :exc:`queue.Empty`.
Richard Oudkerk95fe1a72013-06-24 14:48:07 +0100716
717 (2) If multiple processes are enqueuing objects, it is possible for
718 the objects to be received at the other end out-of-order.
719 However, objects enqueued by the same process will always be in
720 the expected order with respect to each other.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000721
722.. warning::
723
724 If a process is killed using :meth:`Process.terminate` or :func:`os.kill`
725 while it is trying to use a :class:`Queue`, then the data in the queue is
Eli Benderskyd08effe2011-12-31 07:20:26 +0200726 likely to become corrupted. This may cause any other process to get an
Benjamin Petersone711caf2008-06-11 16:44:04 +0000727 exception when it tries to use the queue later on.
728
729.. warning::
730
731 As mentioned above, if a child process has put items on a queue (and it has
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +0300732 not used :meth:`JoinableQueue.cancel_join_thread
733 <multiprocessing.Queue.cancel_join_thread>`), then that process will
Benjamin Petersone711caf2008-06-11 16:44:04 +0000734 not terminate until all buffered items have been flushed to the pipe.
735
736 This means that if you try joining that process you may get a deadlock unless
737 you are sure that all items which have been put on the queue have been
738 consumed. Similarly, if the child process is non-daemonic then the parent
Georg Brandl2ee470f2008-07-16 12:55:28 +0000739 process may hang on exit when it tries to join all its non-daemonic children.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000740
741 Note that a queue created using a manager does not have this issue. See
742 :ref:`multiprocessing-programming`.
743
Benjamin Petersone711caf2008-06-11 16:44:04 +0000744For an example of the usage of queues for interprocess communication see
745:ref:`multiprocessing-examples`.
746
747
748.. function:: Pipe([duplex])
749
Bo Bayles9f3535c2018-04-29 13:03:05 -0500750 Returns a pair ``(conn1, conn2)`` of
751 :class:`~multiprocessing.connection.Connection` objects representing the
752 ends of a pipe.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000753
754 If *duplex* is ``True`` (the default) then the pipe is bidirectional. If
755 *duplex* is ``False`` then the pipe is unidirectional: ``conn1`` can only be
756 used for receiving messages and ``conn2`` can only be used for sending
757 messages.
758
759
760.. class:: Queue([maxsize])
761
762 Returns a process shared queue implemented using a pipe and a few
763 locks/semaphores. When a process first puts an item on the queue a feeder
764 thread is started which transfers objects from a buffer into the pipe.
765
Benjamin Peterson257060a2008-06-28 01:42:41 +0000766 The usual :exc:`queue.Empty` and :exc:`queue.Full` exceptions from the
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +0300767 standard library's :mod:`queue` module are raised to signal timeouts.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000768
Benjamin Peterson257060a2008-06-28 01:42:41 +0000769 :class:`Queue` implements all the methods of :class:`queue.Queue` except for
770 :meth:`~queue.Queue.task_done` and :meth:`~queue.Queue.join`.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000771
772 .. method:: qsize()
773
774 Return the approximate size of the queue. Because of
775 multithreading/multiprocessing semantics, this number is not reliable.
776
777 Note that this may raise :exc:`NotImplementedError` on Unix platforms like
Georg Brandlc575c902008-09-13 17:46:05 +0000778 Mac OS X where ``sem_getvalue()`` is not implemented.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000779
780 .. method:: empty()
781
782 Return ``True`` if the queue is empty, ``False`` otherwise. Because of
783 multithreading/multiprocessing semantics, this is not reliable.
784
785 .. method:: full()
786
787 Return ``True`` if the queue is full, ``False`` otherwise. Because of
788 multithreading/multiprocessing semantics, this is not reliable.
789
Senthil Kumarane969a212011-09-06 00:21:30 +0800790 .. method:: put(obj[, block[, timeout]])
Benjamin Petersone711caf2008-06-11 16:44:04 +0000791
Senthil Kumarane969a212011-09-06 00:21:30 +0800792 Put obj into the queue. If the optional argument *block* is ``True``
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000793 (the default) and *timeout* is ``None`` (the default), block if necessary until
Benjamin Petersone711caf2008-06-11 16:44:04 +0000794 a free slot is available. If *timeout* is a positive number, it blocks at
Benjamin Peterson257060a2008-06-28 01:42:41 +0000795 most *timeout* seconds and raises the :exc:`queue.Full` exception if no
Benjamin Petersone711caf2008-06-11 16:44:04 +0000796 free slot was available within that time. Otherwise (*block* is
797 ``False``), put an item on the queue if a free slot is immediately
Benjamin Peterson257060a2008-06-28 01:42:41 +0000798 available, else raise the :exc:`queue.Full` exception (*timeout* is
Benjamin Petersone711caf2008-06-11 16:44:04 +0000799 ignored in that case).
800
Zackery Spytz04617042018-10-13 03:26:09 -0600801 .. versionchanged:: 3.8
802 If the queue is closed, :exc:`ValueError` is raised instead of
803 :exc:`AssertionError`.
804
Senthil Kumarane969a212011-09-06 00:21:30 +0800805 .. method:: put_nowait(obj)
Benjamin Petersone711caf2008-06-11 16:44:04 +0000806
Senthil Kumarane969a212011-09-06 00:21:30 +0800807 Equivalent to ``put(obj, False)``.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000808
809 .. method:: get([block[, timeout]])
810
811 Remove and return an item from the queue. If optional args *block* is
812 ``True`` (the default) and *timeout* is ``None`` (the default), block if
813 necessary until an item is available. If *timeout* is a positive number,
Benjamin Peterson257060a2008-06-28 01:42:41 +0000814 it blocks at most *timeout* seconds and raises the :exc:`queue.Empty`
Benjamin Petersone711caf2008-06-11 16:44:04 +0000815 exception if no item was available within that time. Otherwise (block is
816 ``False``), return an item if one is immediately available, else raise the
Benjamin Peterson257060a2008-06-28 01:42:41 +0000817 :exc:`queue.Empty` exception (*timeout* is ignored in that case).
Benjamin Petersone711caf2008-06-11 16:44:04 +0000818
Zackery Spytz04617042018-10-13 03:26:09 -0600819 .. versionchanged:: 3.8
820 If the queue is closed, :exc:`ValueError` is raised instead of
821 :exc:`OSError`.
822
Benjamin Petersone711caf2008-06-11 16:44:04 +0000823 .. method:: get_nowait()
Benjamin Petersone711caf2008-06-11 16:44:04 +0000824
825 Equivalent to ``get(False)``.
826
827 :class:`multiprocessing.Queue` has a few additional methods not found in
Georg Brandl2ee470f2008-07-16 12:55:28 +0000828 :class:`queue.Queue`. These methods are usually unnecessary for most
829 code:
Benjamin Petersone711caf2008-06-11 16:44:04 +0000830
831 .. method:: close()
832
833 Indicate that no more data will be put on this queue by the current
834 process. The background thread will quit once it has flushed all buffered
835 data to the pipe. This is called automatically when the queue is garbage
836 collected.
837
838 .. method:: join_thread()
839
840 Join the background thread. This can only be used after :meth:`close` has
841 been called. It blocks until the background thread exits, ensuring that
842 all data in the buffer has been flushed to the pipe.
843
844 By default if a process is not the creator of the queue then on exit it
845 will attempt to join the queue's background thread. The process can call
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000846 :meth:`cancel_join_thread` to make :meth:`join_thread` do nothing.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000847
848 .. method:: cancel_join_thread()
849
850 Prevent :meth:`join_thread` from blocking. In particular, this prevents
851 the background thread from being joined automatically when the process
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000852 exits -- see :meth:`join_thread`.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000853
Richard Oudkerkd7d3f372013-07-02 12:59:55 +0100854 A better name for this method might be
855 ``allow_exit_without_flush()``. It is likely to cause enqueued
856 data to lost, and you almost certainly will not need to use it.
857 It is really only there if you need the current process to exit
858 immediately without waiting to flush enqueued data to the
859 underlying pipe, and you don't care about lost data.
860
Berker Peksag7ecfc822015-04-08 17:56:30 +0300861 .. note::
862
863 This class's functionality requires a functioning shared semaphore
864 implementation on the host operating system. Without one, the
865 functionality in this class will be disabled, and attempts to
866 instantiate a :class:`Queue` will result in an :exc:`ImportError`. See
867 :issue:`3770` for additional information. The same holds true for any
868 of the specialized queue types listed below.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000869
Sandro Tosicd778152012-02-15 23:27:00 +0100870.. class:: SimpleQueue()
Sandro Tosi5cb522c2012-02-15 23:14:21 +0100871
872 It is a simplified :class:`Queue` type, very close to a locked :class:`Pipe`.
873
874 .. method:: empty()
875
876 Return ``True`` if the queue is empty, ``False`` otherwise.
877
878 .. method:: get()
879
880 Remove and return an item from the queue.
881
882 .. method:: put(item)
883
884 Put *item* into the queue.
885
886
Benjamin Petersone711caf2008-06-11 16:44:04 +0000887.. class:: JoinableQueue([maxsize])
888
889 :class:`JoinableQueue`, a :class:`Queue` subclass, is a queue which
890 additionally has :meth:`task_done` and :meth:`join` methods.
891
892 .. method:: task_done()
893
Eli Bendersky78da3bc2012-07-13 10:10:05 +0300894 Indicate that a formerly enqueued task is complete. Used by queue
895 consumers. For each :meth:`~Queue.get` used to fetch a task, a subsequent
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000896 call to :meth:`task_done` tells the queue that the processing on the task
897 is complete.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000898
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +0300899 If a :meth:`~queue.Queue.join` is currently blocking, it will resume when all
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000900 items have been processed (meaning that a :meth:`task_done` call was
901 received for every item that had been :meth:`~Queue.put` into the queue).
Benjamin Petersone711caf2008-06-11 16:44:04 +0000902
903 Raises a :exc:`ValueError` if called more times than there were items
904 placed in the queue.
905
906
907 .. method:: join()
908
909 Block until all items in the queue have been gotten and processed.
910
911 The count of unfinished tasks goes up whenever an item is added to the
Eli Bendersky78da3bc2012-07-13 10:10:05 +0300912 queue. The count goes down whenever a consumer calls
Benjamin Petersone711caf2008-06-11 16:44:04 +0000913 :meth:`task_done` to indicate that the item was retrieved and all work on
914 it is complete. When the count of unfinished tasks drops to zero,
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +0300915 :meth:`~queue.Queue.join` unblocks.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000916
917
918Miscellaneous
919~~~~~~~~~~~~~
920
921.. function:: active_children()
922
923 Return list of all live children of the current process.
924
Zachary Ware72805612014-10-03 10:55:12 -0500925 Calling this has the side effect of "joining" any processes which have
Benjamin Petersone711caf2008-06-11 16:44:04 +0000926 already finished.
927
928.. function:: cpu_count()
929
Charles-François Natalidc87e4b2015-07-13 21:01:39 +0100930 Return the number of CPUs in the system.
931
932 This number is not equivalent to the number of CPUs the current process can
933 use. The number of usable CPUs can be obtained with
934 ``len(os.sched_getaffinity(0))``
935
936 May raise :exc:`NotImplementedError`.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000937
Charles-Francois Natali44feda32013-05-20 14:40:46 +0200938 .. seealso::
939 :func:`os.cpu_count`
940
Benjamin Petersone711caf2008-06-11 16:44:04 +0000941.. function:: current_process()
942
943 Return the :class:`Process` object corresponding to the current process.
944
945 An analogue of :func:`threading.current_thread`.
946
947.. function:: freeze_support()
948
949 Add support for when a program which uses :mod:`multiprocessing` has been
950 frozen to produce a Windows executable. (Has been tested with **py2exe**,
951 **PyInstaller** and **cx_Freeze**.)
952
953 One needs to call this function straight after the ``if __name__ ==
954 '__main__'`` line of the main module. For example::
955
956 from multiprocessing import Process, freeze_support
957
958 def f():
Georg Brandl49702152008-09-29 06:43:45 +0000959 print('hello world!')
Benjamin Petersone711caf2008-06-11 16:44:04 +0000960
961 if __name__ == '__main__':
962 freeze_support()
963 Process(target=f).start()
964
R. David Murray8e8099c2009-04-28 18:02:00 +0000965 If the ``freeze_support()`` line is omitted then trying to run the frozen
Benjamin Peterson5289b2b2008-06-28 00:40:54 +0000966 executable will raise :exc:`RuntimeError`.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000967
Berker Peksag94541f42016-01-07 18:45:22 +0200968 Calling ``freeze_support()`` has no effect when invoked on any operating
969 system other than Windows. In addition, if the module is being run
970 normally by the Python interpreter on Windows (the program has not been
971 frozen), then ``freeze_support()`` has no effect.
Benjamin Petersone711caf2008-06-11 16:44:04 +0000972
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100973.. function:: get_all_start_methods()
974
975 Returns a list of the supported start methods, the first of which
976 is the default. The possible start methods are ``'fork'``,
977 ``'spawn'`` and ``'forkserver'``. On Windows only ``'spawn'`` is
978 available. On Unix ``'fork'`` and ``'spawn'`` are always
979 supported, with ``'fork'`` being the default.
980
981 .. versionadded:: 3.4
982
Richard Oudkerkb1694cf2013-10-16 16:41:56 +0100983.. function:: get_context(method=None)
Richard Oudkerk84ed9a62013-08-14 15:35:41 +0100984
Richard Oudkerkb1694cf2013-10-16 16:41:56 +0100985 Return a context object which has the same attributes as the
986 :mod:`multiprocessing` module.
987
Serhiy Storchakaecf41da2016-10-19 16:29:26 +0300988 If *method* is ``None`` then the default context is returned.
Richard Oudkerkb1694cf2013-10-16 16:41:56 +0100989 Otherwise *method* should be ``'fork'``, ``'spawn'``,
990 ``'forkserver'``. :exc:`ValueError` is raised if the specified
991 start method is not available.
992
993 .. versionadded:: 3.4
994
995.. function:: get_start_method(allow_none=False)
996
997 Return the name of start method used for starting processes.
998
999 If the start method has not been fixed and *allow_none* is false,
1000 then the start method is fixed to the default and the name is
1001 returned. If the start method has not been fixed and *allow_none*
Serhiy Storchakaecf41da2016-10-19 16:29:26 +03001002 is true then ``None`` is returned.
Richard Oudkerkb1694cf2013-10-16 16:41:56 +01001003
1004 The return value can be ``'fork'``, ``'spawn'``, ``'forkserver'``
Serhiy Storchakaecf41da2016-10-19 16:29:26 +03001005 or ``None``. ``'fork'`` is the default on Unix, while ``'spawn'`` is
Richard Oudkerkb1694cf2013-10-16 16:41:56 +01001006 the default on Windows.
Richard Oudkerk84ed9a62013-08-14 15:35:41 +01001007
1008 .. versionadded:: 3.4
1009
Benjamin Petersone711caf2008-06-11 16:44:04 +00001010.. function:: set_executable()
1011
Ezio Melotti0639d5a2009-12-19 23:26:38 +00001012 Sets the path of the Python interpreter to use when starting a child process.
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00001013 (By default :data:`sys.executable` is used). Embedders will probably need to
1014 do some thing like ::
Benjamin Petersone711caf2008-06-11 16:44:04 +00001015
Eli Benderskyd08effe2011-12-31 07:20:26 +02001016 set_executable(os.path.join(sys.exec_prefix, 'pythonw.exe'))
Benjamin Petersone711caf2008-06-11 16:44:04 +00001017
Richard Oudkerk84ed9a62013-08-14 15:35:41 +01001018 before they can create child processes.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001019
Richard Oudkerk84ed9a62013-08-14 15:35:41 +01001020 .. versionchanged:: 3.4
1021 Now supported on Unix when the ``'spawn'`` start method is used.
1022
1023.. function:: set_start_method(method)
1024
1025 Set the method which should be used to start child processes.
1026 *method* can be ``'fork'``, ``'spawn'`` or ``'forkserver'``.
1027
1028 Note that this should be called at most once, and it should be
1029 protected inside the ``if __name__ == '__main__'`` clause of the
1030 main module.
1031
1032 .. versionadded:: 3.4
Benjamin Petersone711caf2008-06-11 16:44:04 +00001033
1034.. note::
1035
1036 :mod:`multiprocessing` contains no analogues of
1037 :func:`threading.active_count`, :func:`threading.enumerate`,
1038 :func:`threading.settrace`, :func:`threading.setprofile`,
1039 :class:`threading.Timer`, or :class:`threading.local`.
1040
1041
1042Connection Objects
1043~~~~~~~~~~~~~~~~~~
1044
Bo Bayles9f3535c2018-04-29 13:03:05 -05001045.. currentmodule:: multiprocessing.connection
1046
Benjamin Petersone711caf2008-06-11 16:44:04 +00001047Connection objects allow the sending and receiving of picklable objects or
1048strings. They can be thought of as message oriented connected sockets.
1049
Bo Bayles9f3535c2018-04-29 13:03:05 -05001050Connection objects are usually created using
1051:func:`Pipe <multiprocessing.Pipe>` -- see also
Benjamin Petersone711caf2008-06-11 16:44:04 +00001052:ref:`multiprocessing-listeners-clients`.
1053
1054.. class:: Connection
1055
1056 .. method:: send(obj)
1057
1058 Send an object to the other end of the connection which should be read
1059 using :meth:`recv`.
1060
Victor Stinner8c663fd2017-11-08 14:44:44 -08001061 The object must be picklable. Very large pickles (approximately 32 MiB+,
Berker Peksag00eaa8a2016-06-12 12:25:43 +03001062 though it depends on the OS) may raise a :exc:`ValueError` exception.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001063
1064 .. method:: recv()
1065
1066 Return an object sent from the other end of the connection using
Yuval Langer6fcb69d2017-07-28 20:39:35 +03001067 :meth:`send`. Blocks until there is something to receive. Raises
Sandro Tosib52e7a92012-01-07 17:56:58 +01001068 :exc:`EOFError` if there is nothing left to receive
Benjamin Petersone711caf2008-06-11 16:44:04 +00001069 and the other end was closed.
1070
1071 .. method:: fileno()
1072
Eli Benderskyd08effe2011-12-31 07:20:26 +02001073 Return the file descriptor or handle used by the connection.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001074
1075 .. method:: close()
1076
1077 Close the connection.
1078
1079 This is called automatically when the connection is garbage collected.
1080
1081 .. method:: poll([timeout])
1082
1083 Return whether there is any data available to be read.
1084
1085 If *timeout* is not specified then it will return immediately. If
1086 *timeout* is a number then this specifies the maximum time in seconds to
1087 block. If *timeout* is ``None`` then an infinite timeout is used.
1088
Antoine Pitroubdb1cf12012-03-05 19:28:37 +01001089 Note that multiple connection objects may be polled at once by
1090 using :func:`multiprocessing.connection.wait`.
1091
Benjamin Petersone711caf2008-06-11 16:44:04 +00001092 .. method:: send_bytes(buffer[, offset[, size]])
1093
Ezio Melottic228e962013-05-04 18:06:34 +03001094 Send byte data from a :term:`bytes-like object` as a complete message.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001095
1096 If *offset* is given then data is read from that position in *buffer*. If
Benjamin Peterson965ce872009-04-05 21:24:58 +00001097 *size* is given then that many bytes will be read from buffer. Very large
Victor Stinner8c663fd2017-11-08 14:44:44 -08001098 buffers (approximately 32 MiB+, though it depends on the OS) may raise a
Eli Benderskyd08effe2011-12-31 07:20:26 +02001099 :exc:`ValueError` exception
Benjamin Petersone711caf2008-06-11 16:44:04 +00001100
1101 .. method:: recv_bytes([maxlength])
1102
1103 Return a complete message of byte data sent from the other end of the
Sandro Tosib52e7a92012-01-07 17:56:58 +01001104 connection as a string. Blocks until there is something to receive.
1105 Raises :exc:`EOFError` if there is nothing left
Benjamin Petersone711caf2008-06-11 16:44:04 +00001106 to receive and the other end has closed.
1107
1108 If *maxlength* is specified and the message is longer than *maxlength*
Antoine Pitrou62ab10a02011-10-12 20:10:51 +02001109 then :exc:`OSError` is raised and the connection will no longer be
Benjamin Petersone711caf2008-06-11 16:44:04 +00001110 readable.
1111
Antoine Pitrou62ab10a02011-10-12 20:10:51 +02001112 .. versionchanged:: 3.3
Martin Panter7462b6492015-11-02 03:37:02 +00001113 This function used to raise :exc:`IOError`, which is now an
Antoine Pitrou62ab10a02011-10-12 20:10:51 +02001114 alias of :exc:`OSError`.
1115
1116
Benjamin Petersone711caf2008-06-11 16:44:04 +00001117 .. method:: recv_bytes_into(buffer[, offset])
1118
1119 Read into *buffer* a complete message of byte data sent from the other end
Sandro Tosib52e7a92012-01-07 17:56:58 +01001120 of the connection and return the number of bytes in the message. Blocks
1121 until there is something to receive. Raises
Benjamin Petersone711caf2008-06-11 16:44:04 +00001122 :exc:`EOFError` if there is nothing left to receive and the other end was
1123 closed.
1124
Ezio Melottic228e962013-05-04 18:06:34 +03001125 *buffer* must be a writable :term:`bytes-like object`. If
Benjamin Petersone711caf2008-06-11 16:44:04 +00001126 *offset* is given then the message will be written into the buffer from
R. David Murray8e8099c2009-04-28 18:02:00 +00001127 that position. Offset must be a non-negative integer less than the
1128 length of *buffer* (in bytes).
Benjamin Petersone711caf2008-06-11 16:44:04 +00001129
1130 If the buffer is too short then a :exc:`BufferTooShort` exception is
1131 raised and the complete message is available as ``e.args[0]`` where ``e``
1132 is the exception instance.
1133
Antoine Pitrou5438ed12012-04-24 22:56:57 +02001134 .. versionchanged:: 3.3
1135 Connection objects themselves can now be transferred between processes
1136 using :meth:`Connection.send` and :meth:`Connection.recv`.
1137
Richard Oudkerkd69cfe82012-06-18 17:47:52 +01001138 .. versionadded:: 3.3
Serhiy Storchaka14867992014-09-10 23:43:41 +03001139 Connection objects now support the context management protocol -- see
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03001140 :ref:`typecontextmanager`. :meth:`~contextmanager.__enter__` returns the
1141 connection object, and :meth:`~contextmanager.__exit__` calls :meth:`close`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001142
1143For example:
1144
R. David Murray8e8099c2009-04-28 18:02:00 +00001145.. doctest::
1146
Benjamin Petersone711caf2008-06-11 16:44:04 +00001147 >>> from multiprocessing import Pipe
1148 >>> a, b = Pipe()
1149 >>> a.send([1, 'hello', None])
1150 >>> b.recv()
1151 [1, 'hello', None]
Georg Brandl30176892010-10-29 05:22:17 +00001152 >>> b.send_bytes(b'thank you')
Benjamin Petersone711caf2008-06-11 16:44:04 +00001153 >>> a.recv_bytes()
Georg Brandl30176892010-10-29 05:22:17 +00001154 b'thank you'
Benjamin Petersone711caf2008-06-11 16:44:04 +00001155 >>> import array
1156 >>> arr1 = array.array('i', range(5))
1157 >>> arr2 = array.array('i', [0] * 10)
1158 >>> a.send_bytes(arr1)
1159 >>> count = b.recv_bytes_into(arr2)
1160 >>> assert count == len(arr1) * arr1.itemsize
1161 >>> arr2
1162 array('i', [0, 1, 2, 3, 4, 0, 0, 0, 0, 0])
1163
1164
1165.. warning::
1166
1167 The :meth:`Connection.recv` method automatically unpickles the data it
1168 receives, which can be a security risk unless you can trust the process
1169 which sent the message.
1170
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00001171 Therefore, unless the connection object was produced using :func:`Pipe` you
1172 should only use the :meth:`~Connection.recv` and :meth:`~Connection.send`
1173 methods after performing some sort of authentication. See
1174 :ref:`multiprocessing-auth-keys`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001175
1176.. warning::
1177
1178 If a process is killed while it is trying to read or write to a pipe then
1179 the data in the pipe is likely to become corrupted, because it may become
1180 impossible to be sure where the message boundaries lie.
1181
1182
1183Synchronization primitives
1184~~~~~~~~~~~~~~~~~~~~~~~~~~
1185
Bo Bayles9f3535c2018-04-29 13:03:05 -05001186.. currentmodule:: multiprocessing
1187
Benjamin Petersone711caf2008-06-11 16:44:04 +00001188Generally synchronization primitives are not as necessary in a multiprocess
Georg Brandl2ee470f2008-07-16 12:55:28 +00001189program as they are in a multithreaded program. See the documentation for
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00001190:mod:`threading` module.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001191
1192Note that one can also create synchronization primitives by using a manager
1193object -- see :ref:`multiprocessing-managers`.
1194
Richard Oudkerk3730a172012-06-15 18:26:07 +01001195.. class:: Barrier(parties[, action[, timeout]])
1196
1197 A barrier object: a clone of :class:`threading.Barrier`.
1198
1199 .. versionadded:: 3.3
1200
Benjamin Petersone711caf2008-06-11 16:44:04 +00001201.. class:: BoundedSemaphore([value])
1202
Berker Peksag407c4972015-09-21 06:50:55 +03001203 A bounded semaphore object: a close analog of
1204 :class:`threading.BoundedSemaphore`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001205
Berker Peksag407c4972015-09-21 06:50:55 +03001206 A solitary difference from its close analog exists: its ``acquire`` method's
1207 first argument is named *block*, as is consistent with :meth:`Lock.acquire`.
1208
1209 .. note::
1210 On Mac OS X, this is indistinguishable from :class:`Semaphore` because
1211 ``sem_getvalue()`` is not implemented on that platform.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001212
1213.. class:: Condition([lock])
1214
R David Murrayef4d2862012-10-06 14:35:35 -04001215 A condition variable: an alias for :class:`threading.Condition`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001216
1217 If *lock* is specified then it should be a :class:`Lock` or :class:`RLock`
1218 object from :mod:`multiprocessing`.
1219
Charles-François Natalic8ce7152012-04-17 18:45:57 +02001220 .. versionchanged:: 3.3
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03001221 The :meth:`~threading.Condition.wait_for` method was added.
Charles-François Natalic8ce7152012-04-17 18:45:57 +02001222
Benjamin Petersone711caf2008-06-11 16:44:04 +00001223.. class:: Event()
1224
1225 A clone of :class:`threading.Event`.
1226
Berker Peksag407c4972015-09-21 06:50:55 +03001227
Benjamin Petersone711caf2008-06-11 16:44:04 +00001228.. class:: Lock()
1229
Berker Peksag407c4972015-09-21 06:50:55 +03001230 A non-recursive lock object: a close analog of :class:`threading.Lock`.
1231 Once a process or thread has acquired a lock, subsequent attempts to
1232 acquire it from any process or thread will block until it is released;
1233 any process or thread may release it. The concepts and behaviors of
1234 :class:`threading.Lock` as it applies to threads are replicated here in
1235 :class:`multiprocessing.Lock` as it applies to either processes or threads,
1236 except as noted.
1237
1238 Note that :class:`Lock` is actually a factory function which returns an
1239 instance of ``multiprocessing.synchronize.Lock`` initialized with a
1240 default context.
1241
1242 :class:`Lock` supports the :term:`context manager` protocol and thus may be
1243 used in :keyword:`with` statements.
1244
1245 .. method:: acquire(block=True, timeout=None)
1246
1247 Acquire a lock, blocking or non-blocking.
1248
1249 With the *block* argument set to ``True`` (the default), the method call
1250 will block until the lock is in an unlocked state, then set it to locked
1251 and return ``True``. Note that the name of this first argument differs
1252 from that in :meth:`threading.Lock.acquire`.
1253
1254 With the *block* argument set to ``False``, the method call does not
1255 block. If the lock is currently in a locked state, return ``False``;
1256 otherwise set the lock to a locked state and return ``True``.
1257
1258 When invoked with a positive, floating-point value for *timeout*, block
1259 for at most the number of seconds specified by *timeout* as long as
1260 the lock can not be acquired. Invocations with a negative value for
1261 *timeout* are equivalent to a *timeout* of zero. Invocations with a
1262 *timeout* value of ``None`` (the default) set the timeout period to
1263 infinite. Note that the treatment of negative or ``None`` values for
1264 *timeout* differs from the implemented behavior in
1265 :meth:`threading.Lock.acquire`. The *timeout* argument has no practical
1266 implications if the *block* argument is set to ``False`` and is thus
1267 ignored. Returns ``True`` if the lock has been acquired or ``False`` if
1268 the timeout period has elapsed.
1269
1270
1271 .. method:: release()
1272
1273 Release a lock. This can be called from any process or thread, not only
1274 the process or thread which originally acquired the lock.
1275
1276 Behavior is the same as in :meth:`threading.Lock.release` except that
1277 when invoked on an unlocked lock, a :exc:`ValueError` is raised.
1278
Benjamin Petersone711caf2008-06-11 16:44:04 +00001279
1280.. class:: RLock()
1281
Berker Peksag407c4972015-09-21 06:50:55 +03001282 A recursive lock object: a close analog of :class:`threading.RLock`. A
1283 recursive lock must be released by the process or thread that acquired it.
1284 Once a process or thread has acquired a recursive lock, the same process
1285 or thread may acquire it again without blocking; that process or thread
1286 must release it once for each time it has been acquired.
1287
1288 Note that :class:`RLock` is actually a factory function which returns an
1289 instance of ``multiprocessing.synchronize.RLock`` initialized with a
1290 default context.
1291
1292 :class:`RLock` supports the :term:`context manager` protocol and thus may be
1293 used in :keyword:`with` statements.
1294
1295
1296 .. method:: acquire(block=True, timeout=None)
1297
1298 Acquire a lock, blocking or non-blocking.
1299
1300 When invoked with the *block* argument set to ``True``, block until the
1301 lock is in an unlocked state (not owned by any process or thread) unless
1302 the lock is already owned by the current process or thread. The current
1303 process or thread then takes ownership of the lock (if it does not
1304 already have ownership) and the recursion level inside the lock increments
1305 by one, resulting in a return value of ``True``. Note that there are
1306 several differences in this first argument's behavior compared to the
1307 implementation of :meth:`threading.RLock.acquire`, starting with the name
1308 of the argument itself.
1309
1310 When invoked with the *block* argument set to ``False``, do not block.
1311 If the lock has already been acquired (and thus is owned) by another
1312 process or thread, the current process or thread does not take ownership
1313 and the recursion level within the lock is not changed, resulting in
1314 a return value of ``False``. If the lock is in an unlocked state, the
1315 current process or thread takes ownership and the recursion level is
1316 incremented, resulting in a return value of ``True``.
1317
1318 Use and behaviors of the *timeout* argument are the same as in
1319 :meth:`Lock.acquire`. Note that some of these behaviors of *timeout*
1320 differ from the implemented behaviors in :meth:`threading.RLock.acquire`.
1321
1322
1323 .. method:: release()
1324
1325 Release a lock, decrementing the recursion level. If after the
1326 decrement the recursion level is zero, reset the lock to unlocked (not
1327 owned by any process or thread) and if any other processes or threads
1328 are blocked waiting for the lock to become unlocked, allow exactly one
1329 of them to proceed. If after the decrement the recursion level is still
1330 nonzero, the lock remains locked and owned by the calling process or
1331 thread.
1332
1333 Only call this method when the calling process or thread owns the lock.
1334 An :exc:`AssertionError` is raised if this method is called by a process
1335 or thread other than the owner or if the lock is in an unlocked (unowned)
1336 state. Note that the type of exception raised in this situation
1337 differs from the implemented behavior in :meth:`threading.RLock.release`.
1338
Benjamin Petersone711caf2008-06-11 16:44:04 +00001339
1340.. class:: Semaphore([value])
1341
Berker Peksag407c4972015-09-21 06:50:55 +03001342 A semaphore object: a close analog of :class:`threading.Semaphore`.
1343
1344 A solitary difference from its close analog exists: its ``acquire`` method's
1345 first argument is named *block*, as is consistent with :meth:`Lock.acquire`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001346
1347.. note::
1348
Georg Brandl592296e2010-05-21 21:48:27 +00001349 On Mac OS X, ``sem_timedwait`` is unsupported, so calling ``acquire()`` with
1350 a timeout will emulate that function's behavior using a sleeping loop.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001351
1352.. note::
1353
Serhiy Storchaka0424eaf2015-09-12 17:45:25 +03001354 If the SIGINT signal generated by :kbd:`Ctrl-C` arrives while the main thread is
Benjamin Petersone711caf2008-06-11 16:44:04 +00001355 blocked by a call to :meth:`BoundedSemaphore.acquire`, :meth:`Lock.acquire`,
1356 :meth:`RLock.acquire`, :meth:`Semaphore.acquire`, :meth:`Condition.acquire`
1357 or :meth:`Condition.wait` then the call will be immediately interrupted and
1358 :exc:`KeyboardInterrupt` will be raised.
1359
1360 This differs from the behaviour of :mod:`threading` where SIGINT will be
1361 ignored while the equivalent blocking calls are in progress.
1362
Berker Peksag7ecfc822015-04-08 17:56:30 +03001363.. note::
1364
1365 Some of this package's functionality requires a functioning shared semaphore
1366 implementation on the host operating system. Without one, the
1367 :mod:`multiprocessing.synchronize` module will be disabled, and attempts to
1368 import it will result in an :exc:`ImportError`. See
1369 :issue:`3770` for additional information.
1370
Benjamin Petersone711caf2008-06-11 16:44:04 +00001371
1372Shared :mod:`ctypes` Objects
1373~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1374
1375It is possible to create shared objects using shared memory which can be
1376inherited by child processes.
1377
Richard Oudkerk87ea7802012-05-29 12:01:47 +01001378.. function:: Value(typecode_or_type, *args, lock=True)
Benjamin Petersone711caf2008-06-11 16:44:04 +00001379
1380 Return a :mod:`ctypes` object allocated from shared memory. By default the
Eli Bendersky78da3bc2012-07-13 10:10:05 +03001381 return value is actually a synchronized wrapper for the object. The object
1382 itself can be accessed via the *value* attribute of a :class:`Value`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001383
1384 *typecode_or_type* determines the type of the returned object: it is either a
1385 ctypes type or a one character typecode of the kind used by the :mod:`array`
1386 module. *\*args* is passed on to the constructor for the type.
1387
Richard Oudkerkedcf8da2013-11-17 17:00:38 +00001388 If *lock* is ``True`` (the default) then a new recursive lock
1389 object is created to synchronize access to the value. If *lock* is
1390 a :class:`Lock` or :class:`RLock` object then that will be used to
1391 synchronize access to the value. If *lock* is ``False`` then
1392 access to the returned object will not be automatically protected
1393 by a lock, so it will not necessarily be "process-safe".
1394
1395 Operations like ``+=`` which involve a read and write are not
1396 atomic. So if, for instance, you want to atomically increment a
1397 shared value it is insufficient to just do ::
1398
1399 counter.value += 1
1400
1401 Assuming the associated lock is recursive (which it is by default)
1402 you can instead do ::
1403
1404 with counter.get_lock():
1405 counter.value += 1
Benjamin Petersone711caf2008-06-11 16:44:04 +00001406
1407 Note that *lock* is a keyword-only argument.
1408
1409.. function:: Array(typecode_or_type, size_or_initializer, *, lock=True)
1410
1411 Return a ctypes array allocated from shared memory. By default the return
1412 value is actually a synchronized wrapper for the array.
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
1419 the array and whose length determines the length of the array.
1420
1421 If *lock* is ``True`` (the default) then a new lock object is created to
1422 synchronize access to the value. If *lock* is a :class:`Lock` or
1423 :class:`RLock` object then that will be used to synchronize access to the
1424 value. If *lock* is ``False`` then access to the returned object will not be
1425 automatically protected by a lock, so it will not necessarily be
1426 "process-safe".
1427
1428 Note that *lock* is a keyword only argument.
1429
Amaury Forgeot d'Arcb0c29162008-11-22 22:18:04 +00001430 Note that an array of :data:`ctypes.c_char` has *value* and *raw*
Benjamin Petersone711caf2008-06-11 16:44:04 +00001431 attributes which allow one to use it to store and retrieve strings.
1432
1433
1434The :mod:`multiprocessing.sharedctypes` module
1435>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
1436
1437.. module:: multiprocessing.sharedctypes
1438 :synopsis: Allocate ctypes objects from shared memory.
1439
1440The :mod:`multiprocessing.sharedctypes` module provides functions for allocating
1441:mod:`ctypes` objects from shared memory which can be inherited by child
1442processes.
1443
1444.. note::
1445
Georg Brandl2ee470f2008-07-16 12:55:28 +00001446 Although it is possible to store a pointer in shared memory remember that
1447 this will refer to a location in the address space of a specific process.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001448 However, the pointer is quite likely to be invalid in the context of a second
1449 process and trying to dereference the pointer from the second process may
1450 cause a crash.
1451
1452.. function:: RawArray(typecode_or_type, size_or_initializer)
1453
1454 Return a ctypes array allocated from shared memory.
1455
1456 *typecode_or_type* determines the type of the elements of the returned array:
1457 it is either a ctypes type or a one character typecode of the kind used by
1458 the :mod:`array` module. If *size_or_initializer* is an integer then it
1459 determines the length of the array, and the array will be initially zeroed.
1460 Otherwise *size_or_initializer* is a sequence which is used to initialize the
1461 array and whose length determines the length of the array.
1462
1463 Note that setting and getting an element is potentially non-atomic -- use
1464 :func:`Array` instead to make sure that access is automatically synchronized
1465 using a lock.
1466
1467.. function:: RawValue(typecode_or_type, *args)
1468
1469 Return a ctypes object allocated from shared memory.
1470
1471 *typecode_or_type* determines the type of the returned object: it is either a
1472 ctypes type or a one character typecode of the kind used by the :mod:`array`
Jesse Nollerb0516a62009-01-18 03:11:38 +00001473 module. *\*args* is passed on to the constructor for the type.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001474
1475 Note that setting and getting the value is potentially non-atomic -- use
1476 :func:`Value` instead to make sure that access is automatically synchronized
1477 using a lock.
1478
Amaury Forgeot d'Arcb0c29162008-11-22 22:18:04 +00001479 Note that an array of :data:`ctypes.c_char` has ``value`` and ``raw``
Benjamin Petersone711caf2008-06-11 16:44:04 +00001480 attributes which allow one to use it to store and retrieve strings -- see
1481 documentation for :mod:`ctypes`.
1482
Richard Oudkerk87ea7802012-05-29 12:01:47 +01001483.. function:: Array(typecode_or_type, size_or_initializer, *, lock=True)
Benjamin Petersone711caf2008-06-11 16:44:04 +00001484
1485 The same as :func:`RawArray` except that depending on the value of *lock* a
1486 process-safe synchronization wrapper may be returned instead of a raw ctypes
1487 array.
1488
1489 If *lock* is ``True`` (the default) then a new lock object is created to
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03001490 synchronize access to the value. If *lock* is a
1491 :class:`~multiprocessing.Lock` or :class:`~multiprocessing.RLock` object
1492 then that will be used to synchronize access to the
Benjamin Petersone711caf2008-06-11 16:44:04 +00001493 value. If *lock* is ``False`` then access to the returned object will not be
1494 automatically protected by a lock, so it will not necessarily be
1495 "process-safe".
1496
1497 Note that *lock* is a keyword-only argument.
1498
Richard Oudkerk87ea7802012-05-29 12:01:47 +01001499.. function:: Value(typecode_or_type, *args, lock=True)
Benjamin Petersone711caf2008-06-11 16:44:04 +00001500
1501 The same as :func:`RawValue` except that depending on the value of *lock* a
1502 process-safe synchronization wrapper may be returned instead of a raw ctypes
1503 object.
1504
1505 If *lock* is ``True`` (the default) then a new lock object is created to
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03001506 synchronize access to the value. If *lock* is a :class:`~multiprocessing.Lock` or
1507 :class:`~multiprocessing.RLock` object then that will be used to synchronize access to the
Benjamin Petersone711caf2008-06-11 16:44:04 +00001508 value. If *lock* is ``False`` then access to the returned object will not be
1509 automatically protected by a lock, so it will not necessarily be
1510 "process-safe".
1511
1512 Note that *lock* is a keyword-only argument.
1513
1514.. function:: copy(obj)
1515
1516 Return a ctypes object allocated from shared memory which is a copy of the
1517 ctypes object *obj*.
1518
1519.. function:: synchronized(obj[, lock])
1520
1521 Return a process-safe wrapper object for a ctypes object which uses *lock* to
1522 synchronize access. If *lock* is ``None`` (the default) then a
1523 :class:`multiprocessing.RLock` object is created automatically.
1524
1525 A synchronized wrapper will have two methods in addition to those of the
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00001526 object it wraps: :meth:`get_obj` returns the wrapped object and
1527 :meth:`get_lock` returns the lock object used for synchronization.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001528
1529 Note that accessing the ctypes object through the wrapper can be a lot slower
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00001530 than accessing the raw ctypes object.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001531
Charles-François Natalia924fc72014-05-25 14:12:12 +01001532 .. versionchanged:: 3.5
1533 Synchronized objects support the :term:`context manager` protocol.
1534
Benjamin Petersone711caf2008-06-11 16:44:04 +00001535
1536The table below compares the syntax for creating shared ctypes objects from
1537shared memory with the normal ctypes syntax. (In the table ``MyStruct`` is some
1538subclass of :class:`ctypes.Structure`.)
1539
1540==================== ========================== ===========================
1541ctypes sharedctypes using type sharedctypes using typecode
1542==================== ========================== ===========================
1543c_double(2.4) RawValue(c_double, 2.4) RawValue('d', 2.4)
1544MyStruct(4, 6) RawValue(MyStruct, 4, 6)
1545(c_short * 7)() RawArray(c_short, 7) RawArray('h', 7)
1546(c_int * 3)(9, 2, 8) RawArray(c_int, (9, 2, 8)) RawArray('i', (9, 2, 8))
1547==================== ========================== ===========================
1548
1549
1550Below is an example where a number of ctypes objects are modified by a child
1551process::
1552
1553 from multiprocessing import Process, Lock
1554 from multiprocessing.sharedctypes import Value, Array
1555 from ctypes import Structure, c_double
1556
1557 class Point(Structure):
1558 _fields_ = [('x', c_double), ('y', c_double)]
1559
1560 def modify(n, x, s, A):
1561 n.value **= 2
1562 x.value **= 2
1563 s.value = s.value.upper()
1564 for a in A:
1565 a.x **= 2
1566 a.y **= 2
1567
1568 if __name__ == '__main__':
1569 lock = Lock()
1570
1571 n = Value('i', 7)
R. David Murray8e8099c2009-04-28 18:02:00 +00001572 x = Value(c_double, 1.0/3.0, lock=False)
Richard Oudkerkb5175962012-09-10 13:00:33 +01001573 s = Array('c', b'hello world', lock=lock)
Benjamin Petersone711caf2008-06-11 16:44:04 +00001574 A = Array(Point, [(1.875,-6.25), (-5.75,2.0), (2.375,9.5)], lock=lock)
1575
1576 p = Process(target=modify, args=(n, x, s, A))
1577 p.start()
1578 p.join()
1579
Georg Brandl49702152008-09-29 06:43:45 +00001580 print(n.value)
1581 print(x.value)
1582 print(s.value)
1583 print([(a.x, a.y) for a in A])
Benjamin Petersone711caf2008-06-11 16:44:04 +00001584
1585
Georg Brandl49702152008-09-29 06:43:45 +00001586.. highlight:: none
Benjamin Petersone711caf2008-06-11 16:44:04 +00001587
1588The results printed are ::
1589
1590 49
1591 0.1111111111111111
1592 HELLO WORLD
1593 [(3.515625, 39.0625), (33.0625, 4.0), (5.640625, 90.25)]
1594
Ezio Melottif86b28e2012-04-13 20:50:48 -06001595.. highlight:: python3
Benjamin Petersone711caf2008-06-11 16:44:04 +00001596
1597
1598.. _multiprocessing-managers:
1599
1600Managers
1601~~~~~~~~
1602
1603Managers provide a way to create data which can be shared between different
Eli Bendersky78da3bc2012-07-13 10:10:05 +03001604processes, including sharing over a network between processes running on
1605different machines. A manager object controls a server process which manages
1606*shared objects*. Other processes can access the shared objects by using
1607proxies.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001608
1609.. function:: multiprocessing.Manager()
1610
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00001611 Returns a started :class:`~multiprocessing.managers.SyncManager` object which
1612 can be used for sharing objects between processes. The returned manager
1613 object corresponds to a spawned child process and has methods which will
1614 create shared objects and return corresponding proxies.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001615
1616.. module:: multiprocessing.managers
1617 :synopsis: Share data between process with shared objects.
1618
1619Manager processes will be shutdown as soon as they are garbage collected or
1620their parent process exits. The manager classes are defined in the
1621:mod:`multiprocessing.managers` module:
1622
1623.. class:: BaseManager([address[, authkey]])
1624
1625 Create a BaseManager object.
1626
Benjamin Peterson21896a32010-03-21 22:03:03 +00001627 Once created one should call :meth:`start` or ``get_server().serve_forever()`` to ensure
Benjamin Petersone711caf2008-06-11 16:44:04 +00001628 that the manager object refers to a started manager process.
1629
1630 *address* is the address on which the manager process listens for new
1631 connections. If *address* is ``None`` then an arbitrary one is chosen.
1632
Richard Oudkerk264e9ac2012-08-17 14:39:18 +01001633 *authkey* is the authentication key which will be used to check the
1634 validity of incoming connections to the server process. If
1635 *authkey* is ``None`` then ``current_process().authkey`` is used.
1636 Otherwise *authkey* is used and it must be a byte string.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001637
Benjamin Petersonf47ed4a2009-04-11 20:45:40 +00001638 .. method:: start([initializer[, initargs]])
Benjamin Petersone711caf2008-06-11 16:44:04 +00001639
Benjamin Petersonf47ed4a2009-04-11 20:45:40 +00001640 Start a subprocess to start the manager. If *initializer* is not ``None``
1641 then the subprocess will call ``initializer(*initargs)`` when it starts.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001642
Jesse Noller45239682008-11-28 18:46:19 +00001643 .. method:: get_server()
Georg Brandl48310cd2009-01-03 21:18:54 +00001644
Jesse Noller45239682008-11-28 18:46:19 +00001645 Returns a :class:`Server` object which represents the actual server under
Georg Brandl48310cd2009-01-03 21:18:54 +00001646 the control of the Manager. The :class:`Server` object supports the
R. David Murray8e8099c2009-04-28 18:02:00 +00001647 :meth:`serve_forever` method::
Georg Brandl48310cd2009-01-03 21:18:54 +00001648
Georg Brandl1f01deb2009-01-03 22:47:39 +00001649 >>> from multiprocessing.managers import BaseManager
Richard Oudkerk264e9ac2012-08-17 14:39:18 +01001650 >>> manager = BaseManager(address=('', 50000), authkey=b'abc')
R. David Murray8e8099c2009-04-28 18:02:00 +00001651 >>> server = manager.get_server()
1652 >>> server.serve_forever()
Georg Brandl48310cd2009-01-03 21:18:54 +00001653
R. David Murray8e8099c2009-04-28 18:02:00 +00001654 :class:`Server` additionally has an :attr:`address` attribute.
Jesse Noller45239682008-11-28 18:46:19 +00001655
1656 .. method:: connect()
Georg Brandl48310cd2009-01-03 21:18:54 +00001657
R. David Murray8e8099c2009-04-28 18:02:00 +00001658 Connect a local manager object to a remote manager process::
Georg Brandl48310cd2009-01-03 21:18:54 +00001659
Jesse Noller45239682008-11-28 18:46:19 +00001660 >>> from multiprocessing.managers import BaseManager
Julien Palardd9bd8ec2019-03-11 14:54:48 +01001661 >>> m = BaseManager(address=('127.0.0.1', 50000), authkey=b'abc')
Jesse Noller45239682008-11-28 18:46:19 +00001662 >>> m.connect()
1663
Benjamin Petersone711caf2008-06-11 16:44:04 +00001664 .. method:: shutdown()
1665
1666 Stop the process used by the manager. This is only available if
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00001667 :meth:`start` has been used to start the server process.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001668
1669 This can be called multiple times.
1670
1671 .. method:: register(typeid[, callable[, proxytype[, exposed[, method_to_typeid[, create_method]]]]])
1672
1673 A classmethod which can be used for registering a type or callable with
1674 the manager class.
1675
1676 *typeid* is a "type identifier" which is used to identify a particular
1677 type of shared object. This must be a string.
1678
1679 *callable* is a callable used for creating objects for this type
Richard Oudkerkf0604fd2012-06-11 17:56:08 +01001680 identifier. If a manager instance will be connected to the
1681 server using the :meth:`connect` method, or if the
1682 *create_method* argument is ``False`` then this can be left as
1683 ``None``.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001684
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00001685 *proxytype* is a subclass of :class:`BaseProxy` which is used to create
1686 proxies for shared objects with this *typeid*. If ``None`` then a proxy
1687 class is created automatically.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001688
1689 *exposed* is used to specify a sequence of method names which proxies for
1690 this typeid should be allowed to access using
Larry Hastings3732ed22014-03-15 21:13:56 -07001691 :meth:`BaseProxy._callmethod`. (If *exposed* is ``None`` then
Benjamin Petersone711caf2008-06-11 16:44:04 +00001692 :attr:`proxytype._exposed_` is used instead if it exists.) In the case
1693 where no exposed list is specified, all "public methods" of the shared
1694 object will be accessible. (Here a "public method" means any attribute
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03001695 which has a :meth:`~object.__call__` method and whose name does not begin
1696 with ``'_'``.)
Benjamin Petersone711caf2008-06-11 16:44:04 +00001697
1698 *method_to_typeid* is a mapping used to specify the return type of those
1699 exposed methods which should return a proxy. It maps method names to
1700 typeid strings. (If *method_to_typeid* is ``None`` then
1701 :attr:`proxytype._method_to_typeid_` is used instead if it exists.) If a
1702 method's name is not a key of this mapping or if the mapping is ``None``
1703 then the object returned by the method will be copied by value.
1704
1705 *create_method* determines whether a method should be created with name
1706 *typeid* which can be used to tell the server process to create a new
1707 shared object and return a proxy for it. By default it is ``True``.
1708
1709 :class:`BaseManager` instances also have one read-only property:
1710
1711 .. attribute:: address
1712
1713 The address used by the manager.
1714
Richard Oudkerkac385712012-06-18 21:29:30 +01001715 .. versionchanged:: 3.3
Serhiy Storchaka14867992014-09-10 23:43:41 +03001716 Manager objects support the context management protocol -- see
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03001717 :ref:`typecontextmanager`. :meth:`~contextmanager.__enter__` starts the
1718 server process (if it has not already started) and then returns the
1719 manager object. :meth:`~contextmanager.__exit__` calls :meth:`shutdown`.
Richard Oudkerkac385712012-06-18 21:29:30 +01001720
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03001721 In previous versions :meth:`~contextmanager.__enter__` did not start the
Richard Oudkerkac385712012-06-18 21:29:30 +01001722 manager's server process if it was not already started.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001723
1724.. class:: SyncManager
1725
1726 A subclass of :class:`BaseManager` which can be used for the synchronization
1727 of processes. Objects of this type are returned by
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00001728 :func:`multiprocessing.Manager`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001729
Davin Potts86a76682016-09-07 18:48:01 -05001730 Its methods create and return :ref:`multiprocessing-proxy_objects` for a
1731 number of commonly used data types to be synchronized across processes.
1732 This notably includes shared lists and dictionaries.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001733
Richard Oudkerk3730a172012-06-15 18:26:07 +01001734 .. method:: Barrier(parties[, action[, timeout]])
1735
1736 Create a shared :class:`threading.Barrier` object and return a
1737 proxy for it.
1738
1739 .. versionadded:: 3.3
1740
Benjamin Petersone711caf2008-06-11 16:44:04 +00001741 .. method:: BoundedSemaphore([value])
1742
1743 Create a shared :class:`threading.BoundedSemaphore` object and return a
1744 proxy for it.
1745
1746 .. method:: Condition([lock])
1747
1748 Create a shared :class:`threading.Condition` object and return a proxy for
1749 it.
1750
1751 If *lock* is supplied then it should be a proxy for a
1752 :class:`threading.Lock` or :class:`threading.RLock` object.
1753
Charles-François Natalic8ce7152012-04-17 18:45:57 +02001754 .. versionchanged:: 3.3
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03001755 The :meth:`~threading.Condition.wait_for` method was added.
Charles-François Natalic8ce7152012-04-17 18:45:57 +02001756
Benjamin Petersone711caf2008-06-11 16:44:04 +00001757 .. method:: Event()
1758
1759 Create a shared :class:`threading.Event` object and return a proxy for it.
1760
1761 .. method:: Lock()
1762
1763 Create a shared :class:`threading.Lock` object and return a proxy for it.
1764
1765 .. method:: Namespace()
1766
1767 Create a shared :class:`Namespace` object and return a proxy for it.
1768
1769 .. method:: Queue([maxsize])
1770
Benjamin Peterson257060a2008-06-28 01:42:41 +00001771 Create a shared :class:`queue.Queue` object and return a proxy for it.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001772
1773 .. method:: RLock()
1774
1775 Create a shared :class:`threading.RLock` object and return a proxy for it.
1776
1777 .. method:: Semaphore([value])
1778
1779 Create a shared :class:`threading.Semaphore` object and return a proxy for
1780 it.
1781
1782 .. method:: Array(typecode, sequence)
1783
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00001784 Create an array and return a proxy for it.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001785
1786 .. method:: Value(typecode, value)
1787
1788 Create an object with a writable ``value`` attribute and return a proxy
1789 for it.
1790
1791 .. method:: dict()
1792 dict(mapping)
1793 dict(sequence)
1794
Davin Potts86a76682016-09-07 18:48:01 -05001795 Create a shared :class:`dict` object and return a proxy for it.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001796
1797 .. method:: list()
1798 list(sequence)
1799
Davin Potts86a76682016-09-07 18:48:01 -05001800 Create a shared :class:`list` object and return a proxy for it.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001801
Davin Potts86a76682016-09-07 18:48:01 -05001802 .. versionchanged:: 3.6
1803 Shared objects are capable of being nested. For example, a shared
1804 container object such as a shared list can contain other shared objects
1805 which will all be managed and synchronized by the :class:`SyncManager`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001806
Senthil Kumaran6a0514e2016-01-20 03:10:13 -08001807.. class:: Namespace
Benjamin Petersone711caf2008-06-11 16:44:04 +00001808
Senthil Kumaran6a0514e2016-01-20 03:10:13 -08001809 A type that can register with :class:`SyncManager`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001810
Senthil Kumaran6a0514e2016-01-20 03:10:13 -08001811 A namespace object has no public methods, but does have writable attributes.
1812 Its representation shows the values of its attributes.
R. David Murray8e8099c2009-04-28 18:02:00 +00001813
Senthil Kumaran6a0514e2016-01-20 03:10:13 -08001814 However, when using a proxy for a namespace object, an attribute beginning
1815 with ``'_'`` will be an attribute of the proxy and not an attribute of the
1816 referent:
Benjamin Petersone711caf2008-06-11 16:44:04 +00001817
Senthil Kumaran6a0514e2016-01-20 03:10:13 -08001818 .. doctest::
1819
1820 >>> manager = multiprocessing.Manager()
1821 >>> Global = manager.Namespace()
1822 >>> Global.x = 10
1823 >>> Global.y = 'hello'
1824 >>> Global._z = 12.3 # this is an attribute of the proxy
1825 >>> print(Global)
1826 Namespace(x=10, y='hello')
Benjamin Petersone711caf2008-06-11 16:44:04 +00001827
1828
1829Customized managers
1830>>>>>>>>>>>>>>>>>>>
1831
1832To create one's own manager, one creates a subclass of :class:`BaseManager` and
Eli Benderskyd08effe2011-12-31 07:20:26 +02001833uses the :meth:`~BaseManager.register` classmethod to register new types or
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00001834callables with the manager class. For example::
Benjamin Petersone711caf2008-06-11 16:44:04 +00001835
1836 from multiprocessing.managers import BaseManager
1837
Éric Araujo28053fb2010-11-22 03:09:19 +00001838 class MathsClass:
Benjamin Petersone711caf2008-06-11 16:44:04 +00001839 def add(self, x, y):
1840 return x + y
1841 def mul(self, x, y):
1842 return x * y
1843
1844 class MyManager(BaseManager):
1845 pass
1846
1847 MyManager.register('Maths', MathsClass)
1848
1849 if __name__ == '__main__':
Richard Oudkerk633c4d92012-06-18 21:29:36 +01001850 with MyManager() as manager:
1851 maths = manager.Maths()
1852 print(maths.add(4, 3)) # prints 7
1853 print(maths.mul(7, 8)) # prints 56
Benjamin Petersone711caf2008-06-11 16:44:04 +00001854
1855
1856Using a remote manager
1857>>>>>>>>>>>>>>>>>>>>>>
1858
1859It is possible to run a manager server on one machine and have clients use it
1860from other machines (assuming that the firewalls involved allow it).
1861
1862Running the following commands creates a server for a single shared queue which
1863remote clients can access::
1864
1865 >>> from multiprocessing.managers import BaseManager
Jason Yangc172fc52017-11-26 20:18:33 -05001866 >>> from queue import Queue
1867 >>> queue = Queue()
Benjamin Petersone711caf2008-06-11 16:44:04 +00001868 >>> class QueueManager(BaseManager): pass
Jesse Noller45239682008-11-28 18:46:19 +00001869 >>> QueueManager.register('get_queue', callable=lambda:queue)
Richard Oudkerk264e9ac2012-08-17 14:39:18 +01001870 >>> m = QueueManager(address=('', 50000), authkey=b'abracadabra')
Jesse Noller45239682008-11-28 18:46:19 +00001871 >>> s = m.get_server()
R. David Murray8e8099c2009-04-28 18:02:00 +00001872 >>> s.serve_forever()
Benjamin Petersone711caf2008-06-11 16:44:04 +00001873
1874One client can access the server as follows::
1875
1876 >>> from multiprocessing.managers import BaseManager
1877 >>> class QueueManager(BaseManager): pass
Jesse Noller45239682008-11-28 18:46:19 +00001878 >>> QueueManager.register('get_queue')
Richard Oudkerk264e9ac2012-08-17 14:39:18 +01001879 >>> m = QueueManager(address=('foo.bar.org', 50000), authkey=b'abracadabra')
Jesse Noller45239682008-11-28 18:46:19 +00001880 >>> m.connect()
1881 >>> queue = m.get_queue()
Benjamin Petersone711caf2008-06-11 16:44:04 +00001882 >>> queue.put('hello')
1883
1884Another client can also use it::
1885
1886 >>> from multiprocessing.managers import BaseManager
1887 >>> class QueueManager(BaseManager): pass
R. David Murray8e8099c2009-04-28 18:02:00 +00001888 >>> QueueManager.register('get_queue')
Richard Oudkerk264e9ac2012-08-17 14:39:18 +01001889 >>> m = QueueManager(address=('foo.bar.org', 50000), authkey=b'abracadabra')
R. David Murray8e8099c2009-04-28 18:02:00 +00001890 >>> m.connect()
1891 >>> queue = m.get_queue()
Benjamin Petersone711caf2008-06-11 16:44:04 +00001892 >>> queue.get()
1893 'hello'
1894
Georg Brandl48310cd2009-01-03 21:18:54 +00001895Local processes can also access that queue, using the code from above on the
Jesse Noller45239682008-11-28 18:46:19 +00001896client to access it remotely::
1897
1898 >>> from multiprocessing import Process, Queue
1899 >>> from multiprocessing.managers import BaseManager
1900 >>> class Worker(Process):
1901 ... def __init__(self, q):
1902 ... self.q = q
1903 ... super(Worker, self).__init__()
1904 ... def run(self):
1905 ... self.q.put('local hello')
Georg Brandl48310cd2009-01-03 21:18:54 +00001906 ...
Jesse Noller45239682008-11-28 18:46:19 +00001907 >>> queue = Queue()
1908 >>> w = Worker(queue)
1909 >>> w.start()
1910 >>> class QueueManager(BaseManager): pass
Georg Brandl48310cd2009-01-03 21:18:54 +00001911 ...
Jesse Noller45239682008-11-28 18:46:19 +00001912 >>> QueueManager.register('get_queue', callable=lambda: queue)
Richard Oudkerk264e9ac2012-08-17 14:39:18 +01001913 >>> m = QueueManager(address=('', 50000), authkey=b'abracadabra')
Jesse Noller45239682008-11-28 18:46:19 +00001914 >>> s = m.get_server()
1915 >>> s.serve_forever()
Benjamin Petersone711caf2008-06-11 16:44:04 +00001916
Davin Potts86a76682016-09-07 18:48:01 -05001917.. _multiprocessing-proxy_objects:
1918
Benjamin Petersone711caf2008-06-11 16:44:04 +00001919Proxy Objects
1920~~~~~~~~~~~~~
1921
1922A proxy is an object which *refers* to a shared object which lives (presumably)
1923in a different process. The shared object is said to be the *referent* of the
1924proxy. Multiple proxy objects may have the same referent.
1925
1926A proxy object has methods which invoke corresponding methods of its referent
1927(although not every method of the referent will necessarily be available through
Davin Potts86a76682016-09-07 18:48:01 -05001928the proxy). In this way, a proxy can be used just like its referent can:
R. David Murray8e8099c2009-04-28 18:02:00 +00001929
1930.. doctest::
Benjamin Petersone711caf2008-06-11 16:44:04 +00001931
1932 >>> from multiprocessing import Manager
1933 >>> manager = Manager()
1934 >>> l = manager.list([i*i for i in range(10)])
Georg Brandl49702152008-09-29 06:43:45 +00001935 >>> print(l)
Benjamin Petersone711caf2008-06-11 16:44:04 +00001936 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Georg Brandl49702152008-09-29 06:43:45 +00001937 >>> print(repr(l))
R. David Murray8e8099c2009-04-28 18:02:00 +00001938 <ListProxy object, typeid 'list' at 0x...>
Benjamin Petersone711caf2008-06-11 16:44:04 +00001939 >>> l[4]
1940 16
1941 >>> l[2:5]
1942 [4, 9, 16]
1943
1944Notice that applying :func:`str` to a proxy will return the representation of
1945the referent, whereas applying :func:`repr` will return the representation of
1946the proxy.
1947
1948An important feature of proxy objects is that they are picklable so they can be
Davin Potts86a76682016-09-07 18:48:01 -05001949passed between processes. As such, a referent can contain
1950:ref:`multiprocessing-proxy_objects`. This permits nesting of these managed
1951lists, dicts, and other :ref:`multiprocessing-proxy_objects`:
R. David Murray8e8099c2009-04-28 18:02:00 +00001952
1953.. doctest::
Benjamin Petersone711caf2008-06-11 16:44:04 +00001954
1955 >>> a = manager.list()
1956 >>> b = manager.list()
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00001957 >>> a.append(b) # referent of a now contains referent of b
Georg Brandl49702152008-09-29 06:43:45 +00001958 >>> print(a, b)
Davin Potts86a76682016-09-07 18:48:01 -05001959 [<ListProxy object, typeid 'list' at ...>] []
Benjamin Petersone711caf2008-06-11 16:44:04 +00001960 >>> b.append('hello')
Davin Potts86a76682016-09-07 18:48:01 -05001961 >>> print(a[0], b)
1962 ['hello'] ['hello']
1963
1964Similarly, dict and list proxies may be nested inside one another::
1965
1966 >>> l_outer = manager.list([ manager.dict() for i in range(2) ])
1967 >>> d_first_inner = l_outer[0]
1968 >>> d_first_inner['a'] = 1
1969 >>> d_first_inner['b'] = 2
1970 >>> l_outer[1]['c'] = 3
1971 >>> l_outer[1]['z'] = 26
1972 >>> print(l_outer[0])
1973 {'a': 1, 'b': 2}
1974 >>> print(l_outer[1])
1975 {'c': 3, 'z': 26}
1976
1977If standard (non-proxy) :class:`list` or :class:`dict` objects are contained
1978in a referent, modifications to those mutable values will not be propagated
1979through the manager because the proxy has no way of knowing when the values
1980contained within are modified. However, storing a value in a container proxy
1981(which triggers a ``__setitem__`` on the proxy object) does propagate through
1982the manager and so to effectively modify such an item, one could re-assign the
1983modified value to the container proxy::
1984
1985 # create a list proxy and append a mutable object (a dictionary)
1986 lproxy = manager.list()
1987 lproxy.append({})
1988 # now mutate the dictionary
1989 d = lproxy[0]
1990 d['a'] = 1
1991 d['b'] = 2
1992 # at this point, the changes to d are not yet synced, but by
1993 # updating the dictionary, the proxy is notified of the change
1994 lproxy[0] = d
1995
1996This approach is perhaps less convenient than employing nested
1997:ref:`multiprocessing-proxy_objects` for most use cases but also
1998demonstrates a level of control over the synchronization.
Benjamin Petersone711caf2008-06-11 16:44:04 +00001999
2000.. note::
2001
2002 The proxy types in :mod:`multiprocessing` do nothing to support comparisons
R. David Murray8e8099c2009-04-28 18:02:00 +00002003 by value. So, for instance, we have:
Benjamin Petersone711caf2008-06-11 16:44:04 +00002004
R. David Murray8e8099c2009-04-28 18:02:00 +00002005 .. doctest::
Benjamin Petersone711caf2008-06-11 16:44:04 +00002006
R. David Murray8e8099c2009-04-28 18:02:00 +00002007 >>> manager.list([1,2,3]) == [1,2,3]
2008 False
2009
2010 One should just use a copy of the referent instead when making comparisons.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002011
2012.. class:: BaseProxy
2013
2014 Proxy objects are instances of subclasses of :class:`BaseProxy`.
2015
Benjamin Peterson6ebe78f2008-12-21 00:06:59 +00002016 .. method:: _callmethod(methodname[, args[, kwds]])
Benjamin Petersone711caf2008-06-11 16:44:04 +00002017
2018 Call and return the result of a method of the proxy's referent.
2019
2020 If ``proxy`` is a proxy whose referent is ``obj`` then the expression ::
2021
Benjamin Peterson6ebe78f2008-12-21 00:06:59 +00002022 proxy._callmethod(methodname, args, kwds)
Benjamin Petersone711caf2008-06-11 16:44:04 +00002023
2024 will evaluate the expression ::
2025
2026 getattr(obj, methodname)(*args, **kwds)
2027
2028 in the manager's process.
2029
2030 The returned value will be a copy of the result of the call or a proxy to
2031 a new shared object -- see documentation for the *method_to_typeid*
2032 argument of :meth:`BaseManager.register`.
2033
Ezio Melottie130a522011-10-19 10:58:56 +03002034 If an exception is raised by the call, then is re-raised by
Benjamin Peterson6ebe78f2008-12-21 00:06:59 +00002035 :meth:`_callmethod`. If some other exception is raised in the manager's
Benjamin Petersone711caf2008-06-11 16:44:04 +00002036 process then this is converted into a :exc:`RemoteError` exception and is
Benjamin Peterson6ebe78f2008-12-21 00:06:59 +00002037 raised by :meth:`_callmethod`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002038
2039 Note in particular that an exception will be raised if *methodname* has
Martin Panterd21e0b52015-10-10 10:36:22 +00002040 not been *exposed*.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002041
R. David Murray8e8099c2009-04-28 18:02:00 +00002042 An example of the usage of :meth:`_callmethod`:
2043
2044 .. doctest::
Benjamin Petersone711caf2008-06-11 16:44:04 +00002045
2046 >>> l = manager.list(range(10))
Benjamin Peterson6ebe78f2008-12-21 00:06:59 +00002047 >>> l._callmethod('__len__')
Benjamin Petersone711caf2008-06-11 16:44:04 +00002048 10
Larry Hastingsb2c2dc32015-03-29 15:32:55 -07002049 >>> l._callmethod('__getitem__', (slice(2, 7),)) # equivalent to l[2:7]
Benjamin Petersone711caf2008-06-11 16:44:04 +00002050 [2, 3, 4, 5, 6]
Larry Hastingsb2c2dc32015-03-29 15:32:55 -07002051 >>> l._callmethod('__getitem__', (20,)) # equivalent to l[20]
Benjamin Petersone711caf2008-06-11 16:44:04 +00002052 Traceback (most recent call last):
2053 ...
2054 IndexError: list index out of range
2055
Benjamin Peterson6ebe78f2008-12-21 00:06:59 +00002056 .. method:: _getvalue()
Benjamin Petersone711caf2008-06-11 16:44:04 +00002057
2058 Return a copy of the referent.
2059
2060 If the referent is unpicklable then this will raise an exception.
2061
2062 .. method:: __repr__
2063
2064 Return a representation of the proxy object.
2065
2066 .. method:: __str__
2067
2068 Return the representation of the referent.
2069
2070
2071Cleanup
2072>>>>>>>
2073
2074A proxy object uses a weakref callback so that when it gets garbage collected it
2075deregisters itself from the manager which owns its referent.
2076
2077A shared object gets deleted from the manager process when there are no longer
2078any proxies referring to it.
2079
2080
2081Process Pools
2082~~~~~~~~~~~~~
2083
2084.. module:: multiprocessing.pool
2085 :synopsis: Create pools of processes.
2086
2087One can create a pool of processes which will carry out tasks submitted to it
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00002088with the :class:`Pool` class.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002089
Richard Oudkerkb1694cf2013-10-16 16:41:56 +01002090.. class:: Pool([processes[, initializer[, initargs[, maxtasksperchild [, context]]]]])
Benjamin Petersone711caf2008-06-11 16:44:04 +00002091
2092 A process pool object which controls a pool of worker processes to which jobs
2093 can be submitted. It supports asynchronous results with timeouts and
2094 callbacks and has a parallel map implementation.
2095
2096 *processes* is the number of worker processes to use. If *processes* is
Larry Hastings3732ed22014-03-15 21:13:56 -07002097 ``None`` then the number returned by :func:`os.cpu_count` is used.
2098
2099 If *initializer* is not ``None`` then each worker process will call
Benjamin Petersone711caf2008-06-11 16:44:04 +00002100 ``initializer(*initargs)`` when it starts.
2101
Larry Hastings3732ed22014-03-15 21:13:56 -07002102 *maxtasksperchild* is the number of tasks a worker process can complete
2103 before it will exit and be replaced with a fresh worker process, to enable
Serhiy Storchakaecf41da2016-10-19 16:29:26 +03002104 unused resources to be freed. The default *maxtasksperchild* is ``None``, which
Larry Hastings3732ed22014-03-15 21:13:56 -07002105 means worker processes will live as long as the pool.
2106
2107 *context* can be used to specify the context used for starting
2108 the worker processes. Usually a pool is created using the
2109 function :func:`multiprocessing.Pool` or the :meth:`Pool` method
2110 of a context object. In both cases *context* is set
2111 appropriately.
2112
Richard Oudkerkb3c4b982013-07-02 12:32:00 +01002113 Note that the methods of the pool object should only be called by
2114 the process which created the pool.
2115
Georg Brandl17ef0d52010-10-17 06:21:59 +00002116 .. versionadded:: 3.2
Larry Hastings3732ed22014-03-15 21:13:56 -07002117 *maxtasksperchild*
Jesse Noller1f0b6582010-01-27 03:36:01 +00002118
Richard Oudkerkb1694cf2013-10-16 16:41:56 +01002119 .. versionadded:: 3.4
Larry Hastings3732ed22014-03-15 21:13:56 -07002120 *context*
Richard Oudkerkb1694cf2013-10-16 16:41:56 +01002121
Jesse Noller1f0b6582010-01-27 03:36:01 +00002122 .. note::
2123
Georg Brandl17ef0d52010-10-17 06:21:59 +00002124 Worker processes within a :class:`Pool` typically live for the complete
2125 duration of the Pool's work queue. A frequent pattern found in other
2126 systems (such as Apache, mod_wsgi, etc) to free resources held by
2127 workers is to allow a worker within a pool to complete only a set
2128 amount of work before being exiting, being cleaned up and a new
2129 process spawned to replace the old one. The *maxtasksperchild*
2130 argument to the :class:`Pool` exposes this ability to the end user.
Jesse Noller1f0b6582010-01-27 03:36:01 +00002131
Benjamin Petersone711caf2008-06-11 16:44:04 +00002132 .. method:: apply(func[, args[, kwds]])
2133
Benjamin Peterson37d2fe02008-10-24 22:28:58 +00002134 Call *func* with arguments *args* and keyword arguments *kwds*. It blocks
Eli Benderskyd08effe2011-12-31 07:20:26 +02002135 until the result is ready. Given this blocks, :meth:`apply_async` is
2136 better suited for performing work in parallel. Additionally, *func*
2137 is only executed in one of the workers of the pool.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002138
Ask Solem1d3b8932010-11-09 21:36:56 +00002139 .. method:: apply_async(func[, args[, kwds[, callback[, error_callback]]]])
Benjamin Petersone711caf2008-06-11 16:44:04 +00002140
2141 A variant of the :meth:`apply` method which returns a result object.
2142
2143 If *callback* is specified then it should be a callable which accepts a
2144 single argument. When the result becomes ready *callback* is applied to
Ask Solem1d3b8932010-11-09 21:36:56 +00002145 it, that is unless the call failed, in which case the *error_callback*
Martin Panterd21e0b52015-10-10 10:36:22 +00002146 is applied instead.
Ask Solem1d3b8932010-11-09 21:36:56 +00002147
2148 If *error_callback* is specified then it should be a callable which
2149 accepts a single argument. If the target function fails, then
2150 the *error_callback* is called with the exception instance.
2151
2152 Callbacks should complete immediately since otherwise the thread which
2153 handles the results will get blocked.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002154
2155 .. method:: map(func, iterable[, chunksize])
2156
Georg Brandl22b34312009-07-26 14:54:51 +00002157 A parallel equivalent of the :func:`map` built-in function (it supports only
Eli Benderskyd08effe2011-12-31 07:20:26 +02002158 one *iterable* argument though). It blocks until the result is ready.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002159
2160 This method chops the iterable into a number of chunks which it submits to
2161 the process pool as separate tasks. The (approximate) size of these
2162 chunks can be specified by setting *chunksize* to a positive integer.
2163
Windson yang3bab40d2019-01-25 20:01:41 +08002164 Note that it may cause high memory usage for very long iterables. Consider
2165 using :meth:`imap` or :meth:`imap_unordered` with explicit *chunksize*
2166 option for better efficiency.
2167
Sandro Tosidb79e952011-08-08 16:38:13 +02002168 .. method:: map_async(func, iterable[, chunksize[, callback[, error_callback]]])
Benjamin Petersone711caf2008-06-11 16:44:04 +00002169
Georg Brandl502d9a52009-07-26 15:02:41 +00002170 A variant of the :meth:`.map` method which returns a result object.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002171
2172 If *callback* is specified then it should be a callable which accepts a
2173 single argument. When the result becomes ready *callback* is applied to
Ask Solem1d3b8932010-11-09 21:36:56 +00002174 it, that is unless the call failed, in which case the *error_callback*
Martin Panterd21e0b52015-10-10 10:36:22 +00002175 is applied instead.
Ask Solem1d3b8932010-11-09 21:36:56 +00002176
2177 If *error_callback* is specified then it should be a callable which
2178 accepts a single argument. If the target function fails, then
2179 the *error_callback* is called with the exception instance.
2180
2181 Callbacks should complete immediately since otherwise the thread which
2182 handles the results will get blocked.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002183
2184 .. method:: imap(func, iterable[, chunksize])
2185
Windson yang3bab40d2019-01-25 20:01:41 +08002186 A lazier version of :meth:`.map`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002187
2188 The *chunksize* argument is the same as the one used by the :meth:`.map`
2189 method. For very long iterables using a large value for *chunksize* can
Ezio Melottie130a522011-10-19 10:58:56 +03002190 make the job complete **much** faster than using the default value of
Benjamin Petersone711caf2008-06-11 16:44:04 +00002191 ``1``.
2192
Georg Brandl502d9a52009-07-26 15:02:41 +00002193 Also if *chunksize* is ``1`` then the :meth:`!next` method of the iterator
Benjamin Petersone711caf2008-06-11 16:44:04 +00002194 returned by the :meth:`imap` method has an optional *timeout* parameter:
2195 ``next(timeout)`` will raise :exc:`multiprocessing.TimeoutError` if the
2196 result cannot be returned within *timeout* seconds.
2197
2198 .. method:: imap_unordered(func, iterable[, chunksize])
2199
2200 The same as :meth:`imap` except that the ordering of the results from the
2201 returned iterator should be considered arbitrary. (Only when there is
2202 only one worker process is the order guaranteed to be "correct".)
2203
Antoine Pitroude911b22011-12-21 11:03:24 +01002204 .. method:: starmap(func, iterable[, chunksize])
2205
Georg Brandl93a56cd2014-10-30 22:25:41 +01002206 Like :meth:`map` except that the elements of the *iterable* are expected
Antoine Pitroude911b22011-12-21 11:03:24 +01002207 to be iterables that are unpacked as arguments.
2208
Georg Brandl93a56cd2014-10-30 22:25:41 +01002209 Hence an *iterable* of ``[(1,2), (3, 4)]`` results in ``[func(1,2),
2210 func(3,4)]``.
Antoine Pitroude911b22011-12-21 11:03:24 +01002211
2212 .. versionadded:: 3.3
2213
Pablo Galindo11225752017-10-30 18:39:28 +00002214 .. method:: starmap_async(func, iterable[, chunksize[, callback[, error_callback]]])
Antoine Pitroude911b22011-12-21 11:03:24 +01002215
2216 A combination of :meth:`starmap` and :meth:`map_async` that iterates over
Georg Brandl93a56cd2014-10-30 22:25:41 +01002217 *iterable* of iterables and calls *func* with the iterables unpacked.
Antoine Pitroude911b22011-12-21 11:03:24 +01002218 Returns a result object.
2219
2220 .. versionadded:: 3.3
2221
Benjamin Petersone711caf2008-06-11 16:44:04 +00002222 .. method:: close()
2223
2224 Prevents any more tasks from being submitted to the pool. Once all the
2225 tasks have been completed the worker processes will exit.
2226
2227 .. method:: terminate()
2228
2229 Stops the worker processes immediately without completing outstanding
2230 work. When the pool object is garbage collected :meth:`terminate` will be
2231 called immediately.
2232
2233 .. method:: join()
2234
2235 Wait for the worker processes to exit. One must call :meth:`close` or
2236 :meth:`terminate` before using :meth:`join`.
2237
Richard Oudkerkd69cfe82012-06-18 17:47:52 +01002238 .. versionadded:: 3.3
Serhiy Storchaka14867992014-09-10 23:43:41 +03002239 Pool objects now support the context management protocol -- see
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002240 :ref:`typecontextmanager`. :meth:`~contextmanager.__enter__` returns the
Georg Brandl325a1c22013-10-27 09:16:01 +01002241 pool object, and :meth:`~contextmanager.__exit__` calls :meth:`terminate`.
Richard Oudkerkd69cfe82012-06-18 17:47:52 +01002242
Benjamin Petersone711caf2008-06-11 16:44:04 +00002243
2244.. class:: AsyncResult
2245
2246 The class of the result returned by :meth:`Pool.apply_async` and
2247 :meth:`Pool.map_async`.
2248
Georg Brandle3d70ae2008-11-22 08:54:21 +00002249 .. method:: get([timeout])
Benjamin Petersone711caf2008-06-11 16:44:04 +00002250
2251 Return the result when it arrives. If *timeout* is not ``None`` and the
2252 result does not arrive within *timeout* seconds then
2253 :exc:`multiprocessing.TimeoutError` is raised. If the remote call raised
2254 an exception then that exception will be reraised by :meth:`get`.
2255
2256 .. method:: wait([timeout])
2257
2258 Wait until the result is available or until *timeout* seconds pass.
2259
2260 .. method:: ready()
2261
2262 Return whether the call has completed.
2263
2264 .. method:: successful()
2265
2266 Return whether the call completed without raising an exception. Will
2267 raise :exc:`AssertionError` if the result is not ready.
2268
2269The following example demonstrates the use of a pool::
2270
2271 from multiprocessing import Pool
Berker Peksag7405c162016-01-21 23:59:49 +02002272 import time
Benjamin Petersone711caf2008-06-11 16:44:04 +00002273
2274 def f(x):
2275 return x*x
2276
2277 if __name__ == '__main__':
Richard Oudkerk633c4d92012-06-18 21:29:36 +01002278 with Pool(processes=4) as pool: # start 4 worker processes
Berker Peksag7405c162016-01-21 23:59:49 +02002279 result = pool.apply_async(f, (10,)) # evaluate "f(10)" asynchronously in a single process
Richard Oudkerk633c4d92012-06-18 21:29:36 +01002280 print(result.get(timeout=1)) # prints "100" unless your computer is *very* slow
Benjamin Petersone711caf2008-06-11 16:44:04 +00002281
Richard Oudkerk633c4d92012-06-18 21:29:36 +01002282 print(pool.map(f, range(10))) # prints "[0, 1, 4,..., 81]"
Benjamin Petersone711caf2008-06-11 16:44:04 +00002283
Richard Oudkerk633c4d92012-06-18 21:29:36 +01002284 it = pool.imap(f, range(10))
2285 print(next(it)) # prints "0"
2286 print(next(it)) # prints "1"
2287 print(it.next(timeout=1)) # prints "4" unless your computer is *very* slow
Benjamin Petersone711caf2008-06-11 16:44:04 +00002288
Richard Oudkerk633c4d92012-06-18 21:29:36 +01002289 result = pool.apply_async(time.sleep, (10,))
Berker Peksag7405c162016-01-21 23:59:49 +02002290 print(result.get(timeout=1)) # raises multiprocessing.TimeoutError
Benjamin Petersone711caf2008-06-11 16:44:04 +00002291
2292
2293.. _multiprocessing-listeners-clients:
2294
2295Listeners and Clients
2296~~~~~~~~~~~~~~~~~~~~~
2297
2298.. module:: multiprocessing.connection
2299 :synopsis: API for dealing with sockets.
2300
2301Usually message passing between processes is done using queues or by using
Bo Bayles9f3535c2018-04-29 13:03:05 -05002302:class:`~Connection` objects returned by
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002303:func:`~multiprocessing.Pipe`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002304
2305However, the :mod:`multiprocessing.connection` module allows some extra
2306flexibility. It basically gives a high level message oriented API for dealing
Antoine Pitroubdb1cf12012-03-05 19:28:37 +01002307with sockets or Windows named pipes. It also has support for *digest
2308authentication* using the :mod:`hmac` module, and for polling
2309multiple connections at the same time.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002310
2311
2312.. function:: deliver_challenge(connection, authkey)
2313
2314 Send a randomly generated message to the other end of the connection and wait
2315 for a reply.
2316
2317 If the reply matches the digest of the message using *authkey* as the key
2318 then a welcome message is sent to the other end of the connection. Otherwise
Eli Benderskyb674dcf2012-07-13 09:45:31 +03002319 :exc:`~multiprocessing.AuthenticationError` is raised.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002320
Ezio Melottic09959a2013-04-10 17:59:20 +03002321.. function:: answer_challenge(connection, authkey)
Benjamin Petersone711caf2008-06-11 16:44:04 +00002322
2323 Receive a message, calculate the digest of the message using *authkey* as the
2324 key, and then send the digest back.
2325
Eli Benderskyb674dcf2012-07-13 09:45:31 +03002326 If a welcome message is not received, then
2327 :exc:`~multiprocessing.AuthenticationError` is raised.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002328
Jelle Zijlstra1e5d54c2017-11-07 08:13:02 -08002329.. function:: Client(address[, family[, authkey]])
Benjamin Petersone711caf2008-06-11 16:44:04 +00002330
2331 Attempt to set up a connection to the listener which is using address
Bo Bayles9f3535c2018-04-29 13:03:05 -05002332 *address*, returning a :class:`~Connection`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002333
2334 The type of the connection is determined by *family* argument, but this can
2335 generally be omitted since it can usually be inferred from the format of
2336 *address*. (See :ref:`multiprocessing-address-formats`)
2337
Jelle Zijlstra1e5d54c2017-11-07 08:13:02 -08002338 If *authkey* is given and not None, it should be a byte string and will be
2339 used as the secret key for an HMAC-based authentication challenge. No
2340 authentication is done if *authkey* is None.
2341 :exc:`~multiprocessing.AuthenticationError` is raised if authentication fails.
2342 See :ref:`multiprocessing-auth-keys`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002343
Jelle Zijlstra1e5d54c2017-11-07 08:13:02 -08002344.. class:: Listener([address[, family[, backlog[, authkey]]]])
Benjamin Petersone711caf2008-06-11 16:44:04 +00002345
2346 A wrapper for a bound socket or Windows named pipe which is 'listening' for
2347 connections.
2348
2349 *address* is the address to be used by the bound socket or named pipe of the
2350 listener object.
2351
Benjamin Petersond23f8222009-04-05 19:13:16 +00002352 .. note::
2353
2354 If an address of '0.0.0.0' is used, the address will not be a connectable
2355 end point on Windows. If you require a connectable end-point,
2356 you should use '127.0.0.1'.
2357
Benjamin Petersone711caf2008-06-11 16:44:04 +00002358 *family* is the type of socket (or named pipe) to use. This can be one of
2359 the strings ``'AF_INET'`` (for a TCP socket), ``'AF_UNIX'`` (for a Unix
2360 domain socket) or ``'AF_PIPE'`` (for a Windows named pipe). Of these only
2361 the first is guaranteed to be available. If *family* is ``None`` then the
2362 family is inferred from the format of *address*. If *address* is also
2363 ``None`` then a default is chosen. This default is the family which is
2364 assumed to be the fastest available. See
2365 :ref:`multiprocessing-address-formats`. Note that if *family* is
2366 ``'AF_UNIX'`` and address is ``None`` then the socket will be created in a
2367 private temporary directory created using :func:`tempfile.mkstemp`.
2368
2369 If the listener object uses a socket then *backlog* (1 by default) is passed
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002370 to the :meth:`~socket.socket.listen` method of the socket once it has been
2371 bound.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002372
Jelle Zijlstra1e5d54c2017-11-07 08:13:02 -08002373 If *authkey* is given and not None, it should be a byte string and will be
2374 used as the secret key for an HMAC-based authentication challenge. No
2375 authentication is done if *authkey* is None.
2376 :exc:`~multiprocessing.AuthenticationError` is raised if authentication fails.
Eli Benderskyb674dcf2012-07-13 09:45:31 +03002377 See :ref:`multiprocessing-auth-keys`.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002378
2379 .. method:: accept()
2380
2381 Accept a connection on the bound socket or named pipe of the listener
Bo Bayles9f3535c2018-04-29 13:03:05 -05002382 object and return a :class:`~Connection` object.
2383 If authentication is attempted and fails, then
Eli Benderskyb674dcf2012-07-13 09:45:31 +03002384 :exc:`~multiprocessing.AuthenticationError` is raised.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002385
2386 .. method:: close()
2387
2388 Close the bound socket or named pipe of the listener object. This is
2389 called automatically when the listener is garbage collected. However it
2390 is advisable to call it explicitly.
2391
2392 Listener objects have the following read-only properties:
2393
2394 .. attribute:: address
2395
2396 The address which is being used by the Listener object.
2397
2398 .. attribute:: last_accepted
2399
2400 The address from which the last accepted connection came. If this is
2401 unavailable then it is ``None``.
2402
Richard Oudkerkd69cfe82012-06-18 17:47:52 +01002403 .. versionadded:: 3.3
Serhiy Storchaka14867992014-09-10 23:43:41 +03002404 Listener objects now support the context management protocol -- see
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002405 :ref:`typecontextmanager`. :meth:`~contextmanager.__enter__` returns the
Georg Brandl325a1c22013-10-27 09:16:01 +01002406 listener object, and :meth:`~contextmanager.__exit__` calls :meth:`close`.
Richard Oudkerkd69cfe82012-06-18 17:47:52 +01002407
Antoine Pitroubdb1cf12012-03-05 19:28:37 +01002408.. function:: wait(object_list, timeout=None)
2409
2410 Wait till an object in *object_list* is ready. Returns the list of
2411 those objects in *object_list* which are ready. If *timeout* is a
2412 float then the call blocks for at most that many seconds. If
2413 *timeout* is ``None`` then it will block for an unlimited period.
Richard Oudkerk59d54042012-05-10 16:11:12 +01002414 A negative timeout is equivalent to a zero timeout.
Antoine Pitroubdb1cf12012-03-05 19:28:37 +01002415
2416 For both Unix and Windows, an object can appear in *object_list* if
2417 it is
2418
Bo Bayles9f3535c2018-04-29 13:03:05 -05002419 * a readable :class:`~multiprocessing.connection.Connection` object;
Antoine Pitroubdb1cf12012-03-05 19:28:37 +01002420 * a connected and readable :class:`socket.socket` object; or
2421 * the :attr:`~multiprocessing.Process.sentinel` attribute of a
2422 :class:`~multiprocessing.Process` object.
2423
2424 A connection or socket object is ready when there is data available
2425 to be read from it, or the other end has been closed.
2426
2427 **Unix**: ``wait(object_list, timeout)`` almost equivalent
2428 ``select.select(object_list, [], [], timeout)``. The difference is
2429 that, if :func:`select.select` is interrupted by a signal, it can
2430 raise :exc:`OSError` with an error number of ``EINTR``, whereas
2431 :func:`wait` will not.
2432
2433 **Windows**: An item in *object_list* must either be an integer
2434 handle which is waitable (according to the definition used by the
2435 documentation of the Win32 function ``WaitForMultipleObjects()``)
2436 or it can be an object with a :meth:`fileno` method which returns a
2437 socket handle or pipe handle. (Note that pipe handles and socket
2438 handles are **not** waitable handles.)
2439
2440 .. versionadded:: 3.3
Benjamin Petersone711caf2008-06-11 16:44:04 +00002441
Benjamin Petersone711caf2008-06-11 16:44:04 +00002442
2443**Examples**
2444
2445The following server code creates a listener which uses ``'secret password'`` as
2446an authentication key. It then waits for a connection and sends some data to
2447the client::
2448
2449 from multiprocessing.connection import Listener
2450 from array import array
2451
2452 address = ('localhost', 6000) # family is deduced to be 'AF_INET'
Benjamin Petersone711caf2008-06-11 16:44:04 +00002453
Richard Oudkerk633c4d92012-06-18 21:29:36 +01002454 with Listener(address, authkey=b'secret password') as listener:
2455 with listener.accept() as conn:
2456 print('connection accepted from', listener.last_accepted)
Benjamin Petersone711caf2008-06-11 16:44:04 +00002457
Richard Oudkerk633c4d92012-06-18 21:29:36 +01002458 conn.send([2.25, None, 'junk', float])
Benjamin Petersone711caf2008-06-11 16:44:04 +00002459
Richard Oudkerk633c4d92012-06-18 21:29:36 +01002460 conn.send_bytes(b'hello')
Benjamin Petersone711caf2008-06-11 16:44:04 +00002461
Richard Oudkerk633c4d92012-06-18 21:29:36 +01002462 conn.send_bytes(array('i', [42, 1729]))
Benjamin Petersone711caf2008-06-11 16:44:04 +00002463
2464The following code connects to the server and receives some data from the
2465server::
2466
2467 from multiprocessing.connection import Client
2468 from array import array
2469
2470 address = ('localhost', 6000)
Benjamin Petersone711caf2008-06-11 16:44:04 +00002471
Richard Oudkerk633c4d92012-06-18 21:29:36 +01002472 with Client(address, authkey=b'secret password') as conn:
2473 print(conn.recv()) # => [2.25, None, 'junk', float]
Benjamin Petersone711caf2008-06-11 16:44:04 +00002474
Richard Oudkerk633c4d92012-06-18 21:29:36 +01002475 print(conn.recv_bytes()) # => 'hello'
Benjamin Petersone711caf2008-06-11 16:44:04 +00002476
Richard Oudkerk633c4d92012-06-18 21:29:36 +01002477 arr = array('i', [0, 0, 0, 0, 0])
2478 print(conn.recv_bytes_into(arr)) # => 8
2479 print(arr) # => array('i', [42, 1729, 0, 0, 0])
Benjamin Petersone711caf2008-06-11 16:44:04 +00002480
Antoine Pitroubdb1cf12012-03-05 19:28:37 +01002481The following code uses :func:`~multiprocessing.connection.wait` to
2482wait for messages from multiple processes at once::
2483
2484 import time, random
2485 from multiprocessing import Process, Pipe, current_process
2486 from multiprocessing.connection import wait
2487
2488 def foo(w):
2489 for i in range(10):
2490 w.send((i, current_process().name))
2491 w.close()
2492
2493 if __name__ == '__main__':
2494 readers = []
2495
2496 for i in range(4):
2497 r, w = Pipe(duplex=False)
2498 readers.append(r)
2499 p = Process(target=foo, args=(w,))
2500 p.start()
2501 # We close the writable end of the pipe now to be sure that
2502 # p is the only process which owns a handle for it. This
2503 # ensures that when p closes its handle for the writable end,
2504 # wait() will promptly report the readable end as being ready.
2505 w.close()
2506
2507 while readers:
2508 for r in wait(readers):
2509 try:
2510 msg = r.recv()
2511 except EOFError:
2512 readers.remove(r)
2513 else:
2514 print(msg)
2515
Benjamin Petersone711caf2008-06-11 16:44:04 +00002516
2517.. _multiprocessing-address-formats:
2518
2519Address Formats
2520>>>>>>>>>>>>>>>
2521
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00002522* An ``'AF_INET'`` address is a tuple of the form ``(hostname, port)`` where
Benjamin Petersone711caf2008-06-11 16:44:04 +00002523 *hostname* is a string and *port* is an integer.
2524
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00002525* An ``'AF_UNIX'`` address is a string representing a filename on the
Benjamin Petersone711caf2008-06-11 16:44:04 +00002526 filesystem.
2527
2528* An ``'AF_PIPE'`` address is a string of the form
Benjamin Petersonda10d3b2009-01-01 00:23:30 +00002529 :samp:`r'\\\\.\\pipe\\{PipeName}'`. To use :func:`Client` to connect to a named
Georg Brandl1f01deb2009-01-03 22:47:39 +00002530 pipe on a remote computer called *ServerName* one should use an address of the
Benjamin Peterson28d88b42009-01-09 03:03:23 +00002531 form :samp:`r'\\\\{ServerName}\\pipe\\{PipeName}'` instead.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002532
2533Note that any string beginning with two backslashes is assumed by default to be
2534an ``'AF_PIPE'`` address rather than an ``'AF_UNIX'`` address.
2535
2536
2537.. _multiprocessing-auth-keys:
2538
2539Authentication keys
2540~~~~~~~~~~~~~~~~~~~
2541
Bo Bayles9f3535c2018-04-29 13:03:05 -05002542When one uses :meth:`Connection.recv <Connection.recv>`, the
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002543data received is automatically
Bo Bayles9f3535c2018-04-29 13:03:05 -05002544unpickled. Unfortunately unpickling data from an untrusted source is a security
2545risk. Therefore :class:`Listener` and :func:`Client` use the :mod:`hmac` module
Benjamin Petersone711caf2008-06-11 16:44:04 +00002546to provide digest authentication.
2547
Richard Oudkerk264e9ac2012-08-17 14:39:18 +01002548An authentication key is a byte string which can be thought of as a
2549password: once a connection is established both ends will demand proof
2550that the other knows the authentication key. (Demonstrating that both
2551ends are using the same key does **not** involve sending the key over
2552the connection.)
Benjamin Petersone711caf2008-06-11 16:44:04 +00002553
Richard Oudkerk264e9ac2012-08-17 14:39:18 +01002554If authentication is requested but no authentication key is specified then the
Benjamin Petersona786b022008-08-25 21:05:21 +00002555return value of ``current_process().authkey`` is used (see
Martin Panter8d56c022016-05-29 04:13:35 +00002556:class:`~multiprocessing.Process`). This value will be automatically inherited by
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00002557any :class:`~multiprocessing.Process` object that the current process creates.
2558This means that (by default) all processes of a multi-process program will share
2559a single authentication key which can be used when setting up connections
Benjamin Petersond23f8222009-04-05 19:13:16 +00002560between themselves.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002561
2562Suitable authentication keys can also be generated by using :func:`os.urandom`.
2563
2564
2565Logging
2566~~~~~~~
2567
2568Some support for logging is available. Note, however, that the :mod:`logging`
2569package does not use process shared locks so it is possible (depending on the
2570handler type) for messages from different processes to get mixed up.
2571
2572.. currentmodule:: multiprocessing
2573.. function:: get_logger()
2574
2575 Returns the logger used by :mod:`multiprocessing`. If necessary, a new one
2576 will be created.
2577
Jesse Noller41faa542009-01-25 03:45:53 +00002578 When first created the logger has level :data:`logging.NOTSET` and no
2579 default handler. Messages sent to this logger will not by default propagate
2580 to the root logger.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002581
2582 Note that on Windows child processes will only inherit the level of the
2583 parent process's logger -- any other customization of the logger will not be
2584 inherited.
2585
Jesse Noller41faa542009-01-25 03:45:53 +00002586.. currentmodule:: multiprocessing
2587.. function:: log_to_stderr()
2588
2589 This function performs a call to :func:`get_logger` but in addition to
2590 returning the logger created by get_logger, it adds a handler which sends
2591 output to :data:`sys.stderr` using format
2592 ``'[%(levelname)s/%(processName)s] %(message)s'``.
2593
Benjamin Petersone711caf2008-06-11 16:44:04 +00002594Below is an example session with logging turned on::
2595
Benjamin Peterson206e3072008-10-19 14:07:49 +00002596 >>> import multiprocessing, logging
Jesse Noller41faa542009-01-25 03:45:53 +00002597 >>> logger = multiprocessing.log_to_stderr()
Benjamin Petersone711caf2008-06-11 16:44:04 +00002598 >>> logger.setLevel(logging.INFO)
2599 >>> logger.warning('doomed')
2600 [WARNING/MainProcess] doomed
Benjamin Peterson206e3072008-10-19 14:07:49 +00002601 >>> m = multiprocessing.Manager()
R. David Murray8e8099c2009-04-28 18:02:00 +00002602 [INFO/SyncManager-...] child process calling self.run()
2603 [INFO/SyncManager-...] created temp directory /.../pymp-...
2604 [INFO/SyncManager-...] manager serving at '/.../listener-...'
Benjamin Petersone711caf2008-06-11 16:44:04 +00002605 >>> del m
2606 [INFO/MainProcess] sending shutdown message to manager
R. David Murray8e8099c2009-04-28 18:02:00 +00002607 [INFO/SyncManager-...] manager exiting with exitcode 0
Benjamin Petersone711caf2008-06-11 16:44:04 +00002608
Jesse Noller41faa542009-01-25 03:45:53 +00002609For a full table of logging levels, see the :mod:`logging` module.
2610
Benjamin Petersone711caf2008-06-11 16:44:04 +00002611
2612The :mod:`multiprocessing.dummy` module
2613~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2614
2615.. module:: multiprocessing.dummy
2616 :synopsis: Dumb wrapper around threading.
2617
2618:mod:`multiprocessing.dummy` replicates the API of :mod:`multiprocessing` but is
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00002619no more than a wrapper around the :mod:`threading` module.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002620
2621
2622.. _multiprocessing-programming:
2623
2624Programming guidelines
2625----------------------
2626
2627There are certain guidelines and idioms which should be adhered to when using
2628:mod:`multiprocessing`.
2629
2630
Richard Oudkerk84ed9a62013-08-14 15:35:41 +01002631All start methods
2632~~~~~~~~~~~~~~~~~
2633
2634The following applies to all start methods.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002635
2636Avoid shared state
2637
2638 As far as possible one should try to avoid shifting large amounts of data
2639 between processes.
2640
2641 It is probably best to stick to using queues or pipes for communication
2642 between processes rather than using the lower level synchronization
Eli Bendersky78da3bc2012-07-13 10:10:05 +03002643 primitives.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002644
2645Picklability
2646
2647 Ensure that the arguments to the methods of proxies are picklable.
2648
2649Thread safety of proxies
2650
2651 Do not use a proxy object from more than one thread unless you protect it
2652 with a lock.
2653
2654 (There is never a problem with different processes using the *same* proxy.)
2655
2656Joining zombie processes
2657
2658 On Unix when a process finishes but has not been joined it becomes a zombie.
2659 There should never be very many because each time a new process starts (or
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002660 :func:`~multiprocessing.active_children` is called) all completed processes
2661 which have not yet been joined will be joined. Also calling a finished
2662 process's :meth:`Process.is_alive <multiprocessing.Process.is_alive>` will
2663 join the process. Even so it is probably good
Benjamin Petersone711caf2008-06-11 16:44:04 +00002664 practice to explicitly join all the processes that you start.
2665
2666Better to inherit than pickle/unpickle
2667
Richard Oudkerk84ed9a62013-08-14 15:35:41 +01002668 When using the *spawn* or *forkserver* start methods many types
2669 from :mod:`multiprocessing` need to be picklable so that child
2670 processes can use them. However, one should generally avoid
2671 sending shared objects to other processes using pipes or queues.
2672 Instead you should arrange the program so that a process which
2673 needs access to a shared resource created elsewhere can inherit it
2674 from an ancestor process.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002675
2676Avoid terminating processes
2677
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002678 Using the :meth:`Process.terminate <multiprocessing.Process.terminate>`
2679 method to stop a process is liable to
Benjamin Petersone711caf2008-06-11 16:44:04 +00002680 cause any shared resources (such as locks, semaphores, pipes and queues)
2681 currently being used by the process to become broken or unavailable to other
2682 processes.
2683
2684 Therefore it is probably best to only consider using
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002685 :meth:`Process.terminate <multiprocessing.Process.terminate>` on processes
2686 which never use any shared resources.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002687
2688Joining processes that use queues
2689
2690 Bear in mind that a process that has put items in a queue will wait before
2691 terminating until all the buffered items are fed by the "feeder" thread to
2692 the underlying pipe. (The child process can call the
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002693 :meth:`Queue.cancel_join_thread <multiprocessing.Queue.cancel_join_thread>`
2694 method of the queue to avoid this behaviour.)
Benjamin Petersone711caf2008-06-11 16:44:04 +00002695
2696 This means that whenever you use a queue you need to make sure that all
2697 items which have been put on the queue will eventually be removed before the
2698 process is joined. Otherwise you cannot be sure that processes which have
2699 put items on the queue will terminate. Remember also that non-daemonic
Zachary Ware72805612014-10-03 10:55:12 -05002700 processes will be joined automatically.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002701
2702 An example which will deadlock is the following::
2703
2704 from multiprocessing import Process, Queue
2705
2706 def f(q):
2707 q.put('X' * 1000000)
2708
2709 if __name__ == '__main__':
2710 queue = Queue()
2711 p = Process(target=f, args=(queue,))
2712 p.start()
2713 p.join() # this deadlocks
2714 obj = queue.get()
2715
Zachary Ware72805612014-10-03 10:55:12 -05002716 A fix here would be to swap the last two lines (or simply remove the
Benjamin Petersone711caf2008-06-11 16:44:04 +00002717 ``p.join()`` line).
2718
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00002719Explicitly pass resources to child processes
Benjamin Petersone711caf2008-06-11 16:44:04 +00002720
Richard Oudkerk84ed9a62013-08-14 15:35:41 +01002721 On Unix using the *fork* start method, a child process can make
2722 use of a shared resource created in a parent process using a
2723 global resource. However, it is better to pass the object as an
2724 argument to the constructor for the child process.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002725
Richard Oudkerk84ed9a62013-08-14 15:35:41 +01002726 Apart from making the code (potentially) compatible with Windows
2727 and the other start methods this also ensures that as long as the
2728 child process is still alive the object will not be garbage
2729 collected in the parent process. This might be important if some
2730 resource is freed when the object is garbage collected in the
2731 parent process.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002732
2733 So for instance ::
2734
2735 from multiprocessing import Process, Lock
2736
2737 def f():
2738 ... do something using "lock" ...
2739
2740 if __name__ == '__main__':
Serhiy Storchakadba90392016-05-10 12:01:23 +03002741 lock = Lock()
2742 for i in range(10):
Benjamin Petersone711caf2008-06-11 16:44:04 +00002743 Process(target=f).start()
2744
2745 should be rewritten as ::
2746
2747 from multiprocessing import Process, Lock
2748
2749 def f(l):
2750 ... do something using "l" ...
2751
2752 if __name__ == '__main__':
Serhiy Storchakadba90392016-05-10 12:01:23 +03002753 lock = Lock()
2754 for i in range(10):
Benjamin Petersone711caf2008-06-11 16:44:04 +00002755 Process(target=f, args=(lock,)).start()
2756
Eli Benderskyd08effe2011-12-31 07:20:26 +02002757Beware of replacing :data:`sys.stdin` with a "file like object"
Alexandre Vassalottic57a84f2009-07-17 12:07:01 +00002758
2759 :mod:`multiprocessing` originally unconditionally called::
2760
2761 os.close(sys.stdin.fileno())
2762
2763 in the :meth:`multiprocessing.Process._bootstrap` method --- this resulted
2764 in issues with processes-in-processes. This has been changed to::
2765
2766 sys.stdin.close()
Victor Stinnera6d865c2016-03-25 09:29:50 +01002767 sys.stdin = open(os.open(os.devnull, os.O_RDONLY), closefd=False)
Alexandre Vassalottic57a84f2009-07-17 12:07:01 +00002768
2769 Which solves the fundamental issue of processes colliding with each other
2770 resulting in a bad file descriptor error, but introduces a potential danger
2771 to applications which replace :func:`sys.stdin` with a "file-like object"
2772 with output buffering. This danger is that if multiple processes call
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002773 :meth:`~io.IOBase.close()` on this file-like object, it could result in the same
Alexandre Vassalottic57a84f2009-07-17 12:07:01 +00002774 data being flushed to the object multiple times, resulting in corruption.
2775
2776 If you write a file-like object and implement your own caching, you can
2777 make it fork-safe by storing the pid whenever you append to the cache,
2778 and discarding the cache when the pid changes. For example::
2779
2780 @property
2781 def cache(self):
2782 pid = os.getpid()
2783 if pid != self._pid:
2784 self._pid = pid
2785 self._cache = []
2786 return self._cache
2787
2788 For more information, see :issue:`5155`, :issue:`5313` and :issue:`5331`
Benjamin Petersone711caf2008-06-11 16:44:04 +00002789
Richard Oudkerk84ed9a62013-08-14 15:35:41 +01002790The *spawn* and *forkserver* start methods
2791~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Benjamin Petersone711caf2008-06-11 16:44:04 +00002792
Richard Oudkerk84ed9a62013-08-14 15:35:41 +01002793There are a few extra restriction which don't apply to the *fork*
2794start method.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002795
2796More picklability
2797
Berker Peksag0b19e1e2016-06-12 12:19:13 +03002798 Ensure that all arguments to :meth:`Process.__init__` are picklable.
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002799 Also, if you subclass :class:`~multiprocessing.Process` then make sure that
2800 instances will be picklable when the :meth:`Process.start
2801 <multiprocessing.Process.start>` method is called.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002802
2803Global variables
2804
2805 Bear in mind that if code run in a child process tries to access a global
2806 variable, then the value it sees (if any) may not be the same as the value
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002807 in the parent process at the time that :meth:`Process.start
2808 <multiprocessing.Process.start>` was called.
Benjamin Petersone711caf2008-06-11 16:44:04 +00002809
2810 However, global variables which are just module level constants cause no
2811 problems.
2812
2813Safe importing of main module
2814
2815 Make sure that the main module can be safely imported by a new Python
2816 interpreter without causing unintended side effects (such a starting a new
2817 process).
2818
Richard Oudkerk84ed9a62013-08-14 15:35:41 +01002819 For example, using the *spawn* or *forkserver* start method
2820 running the following module would fail with a
Benjamin Petersone711caf2008-06-11 16:44:04 +00002821 :exc:`RuntimeError`::
2822
2823 from multiprocessing import Process
2824
2825 def foo():
Georg Brandl49702152008-09-29 06:43:45 +00002826 print('hello')
Benjamin Petersone711caf2008-06-11 16:44:04 +00002827
2828 p = Process(target=foo)
2829 p.start()
2830
2831 Instead one should protect the "entry point" of the program by using ``if
2832 __name__ == '__main__':`` as follows::
2833
Richard Oudkerk84ed9a62013-08-14 15:35:41 +01002834 from multiprocessing import Process, freeze_support, set_start_method
Benjamin Petersone711caf2008-06-11 16:44:04 +00002835
2836 def foo():
Georg Brandl49702152008-09-29 06:43:45 +00002837 print('hello')
Benjamin Petersone711caf2008-06-11 16:44:04 +00002838
2839 if __name__ == '__main__':
2840 freeze_support()
Richard Oudkerk84ed9a62013-08-14 15:35:41 +01002841 set_start_method('spawn')
Benjamin Petersone711caf2008-06-11 16:44:04 +00002842 p = Process(target=foo)
2843 p.start()
2844
Benjamin Peterson5289b2b2008-06-28 00:40:54 +00002845 (The ``freeze_support()`` line can be omitted if the program will be run
Benjamin Petersone711caf2008-06-11 16:44:04 +00002846 normally instead of frozen.)
2847
2848 This allows the newly spawned Python interpreter to safely import the module
2849 and then run the module's ``foo()`` function.
2850
2851 Similar restrictions apply if a pool or manager is created in the main
2852 module.
2853
2854
2855.. _multiprocessing-examples:
2856
2857Examples
2858--------
2859
2860Demonstration of how to create and use customized managers and proxies:
2861
2862.. literalinclude:: ../includes/mp_newtype.py
Ezio Melottif86b28e2012-04-13 20:50:48 -06002863 :language: python3
Benjamin Petersone711caf2008-06-11 16:44:04 +00002864
2865
Serhiy Storchaka9e0ae532013-08-24 00:23:38 +03002866Using :class:`~multiprocessing.pool.Pool`:
Benjamin Petersone711caf2008-06-11 16:44:04 +00002867
2868.. literalinclude:: ../includes/mp_pool.py
Ezio Melottif86b28e2012-04-13 20:50:48 -06002869 :language: python3
Benjamin Petersone711caf2008-06-11 16:44:04 +00002870
2871
Georg Brandl0b37b332010-09-03 22:49:27 +00002872An example showing how to use queues to feed tasks to a collection of worker
Eli Benderskyd08effe2011-12-31 07:20:26 +02002873processes and collect the results:
Benjamin Petersone711caf2008-06-11 16:44:04 +00002874
2875.. literalinclude:: ../includes/mp_workers.py