mirror of https://github.com/python/cpython
Issue #18620: Improve Pool examples in multiprocessing documentation
A single call to Pool.apply_async() will create only one process. To use all of the pool's processes, it should be invoked multiple times: with Pool(processes=4) as pool: results = [pool.apply_async(func, ()) for i in range(4)] Patch by Davin Potts.
This commit is contained in:
commit
2e15d60b83
|
@ -361,8 +361,9 @@ processes in a few different ways.
|
||||||
|
|
||||||
For example::
|
For example::
|
||||||
|
|
||||||
from multiprocessing import Pool
|
from multiprocessing import Pool, TimeoutError
|
||||||
from time import sleep
|
import time
|
||||||
|
import os
|
||||||
|
|
||||||
def f(x):
|
def f(x):
|
||||||
return x*x
|
return x*x
|
||||||
|
@ -378,15 +379,29 @@ For example::
|
||||||
for i in pool.imap_unordered(f, range(10)):
|
for i in pool.imap_unordered(f, range(10)):
|
||||||
print(i)
|
print(i)
|
||||||
|
|
||||||
# evaluate "f(10)" asynchronously
|
# evaluate "f(20)" asynchronously
|
||||||
res = pool.apply_async(f, [10])
|
res = pool.apply_async(f, (20,)) # runs in *only* one process
|
||||||
print(res.get(timeout=1)) # prints "100"
|
print(res.get(timeout=1)) # prints "400"
|
||||||
|
|
||||||
# make worker sleep for 10 secs
|
# evaluate "os.getpid()" asynchronously
|
||||||
res = pool.apply_async(sleep, [10])
|
res = pool.apply_async(os.getpid, ()) # runs in *only* one process
|
||||||
print(res.get(timeout=1)) # raises multiprocessing.TimeoutError
|
print(res.get(timeout=1)) # prints the PID of that process
|
||||||
|
|
||||||
|
# launching multiple evaluations asynchronously *may* use more processes
|
||||||
|
multiple_results = [pool.apply_async(os.getpid, ()) for i in range(4)]
|
||||||
|
print([res.get(timeout=1) for res in multiple_results])
|
||||||
|
|
||||||
|
# make a single worker sleep for 10 secs
|
||||||
|
res = pool.apply_async(time.sleep, (10,))
|
||||||
|
try:
|
||||||
|
print(res.get(timeout=1))
|
||||||
|
except TimeoutError:
|
||||||
|
print("We lacked patience and got a multiprocessing.TimeoutError")
|
||||||
|
|
||||||
|
print("For the moment, the pool remains available for more work")
|
||||||
|
|
||||||
# exiting the 'with'-block has stopped the pool
|
# exiting the 'with'-block has stopped the pool
|
||||||
|
print("Now the pool is closed and no longer available")
|
||||||
|
|
||||||
Note that the methods of a pool should only ever be used by the
|
Note that the methods of a pool should only ever be used by the
|
||||||
process which created it.
|
process which created it.
|
||||||
|
@ -2176,13 +2191,14 @@ with the :class:`Pool` class.
|
||||||
The following example demonstrates the use of a pool::
|
The following example demonstrates the use of a pool::
|
||||||
|
|
||||||
from multiprocessing import Pool
|
from multiprocessing import Pool
|
||||||
|
import time
|
||||||
|
|
||||||
def f(x):
|
def f(x):
|
||||||
return x*x
|
return x*x
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
with Pool(processes=4) as pool: # start 4 worker processes
|
with Pool(processes=4) as pool: # start 4 worker processes
|
||||||
result = pool.apply_async(f, (10,)) # evaluate "f(10)" asynchronously
|
result = pool.apply_async(f, (10,)) # evaluate "f(10)" asynchronously in a single process
|
||||||
print(result.get(timeout=1)) # prints "100" unless your computer is *very* slow
|
print(result.get(timeout=1)) # prints "100" unless your computer is *very* slow
|
||||||
|
|
||||||
print(pool.map(f, range(10))) # prints "[0, 1, 4,..., 81]"
|
print(pool.map(f, range(10))) # prints "[0, 1, 4,..., 81]"
|
||||||
|
@ -2192,9 +2208,8 @@ The following example demonstrates the use of a pool::
|
||||||
print(next(it)) # prints "1"
|
print(next(it)) # prints "1"
|
||||||
print(it.next(timeout=1)) # prints "4" unless your computer is *very* slow
|
print(it.next(timeout=1)) # prints "4" unless your computer is *very* slow
|
||||||
|
|
||||||
import time
|
|
||||||
result = pool.apply_async(time.sleep, (10,))
|
result = pool.apply_async(time.sleep, (10,))
|
||||||
print(result.get(timeout=1)) # raises TimeoutError
|
print(result.get(timeout=1)) # raises multiprocessing.TimeoutError
|
||||||
|
|
||||||
|
|
||||||
.. _multiprocessing-listeners-clients:
|
.. _multiprocessing-listeners-clients:
|
||||||
|
|
Loading…
Reference in New Issue