diff -r 494376ec13d9 Doc/library/multiprocessing.rst --- a/Doc/library/multiprocessing.rst Thu Feb 05 14:25:53 2015 +0100 +++ b/Doc/library/multiprocessing.rst Fri Feb 06 14:36:28 2015 -0600 @@ -370,8 +370,9 @@ For example:: - from multiprocessing import Pool - from time import sleep + from multiprocessing import Pool, TimeoutError + import time + import os def f(x): return x*x @@ -387,15 +388,29 @@ for i in pool.imap_unordered(f, range(10)): print(i) - # evaluate "f(10)" asynchronously - res = pool.apply_async(f, [10]) - print(res.get(timeout=1)) # prints "100" - - # make worker sleep for 10 secs - res = pool.apply_async(sleep, [10]) - print(res.get(timeout=1)) # raises multiprocessing.TimeoutError - + # evaluate "f(20)" asynchronously + res = pool.apply_async(f, (20,)) # runs in *only* one process + print(res.get(timeout=1)) # prints "400" + + # evaluate "os.getpid()" asynchronously + res = pool.apply_async(os.getpid, ()) # runs in *only* one process + 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 + print("Now the pool is closed and no longer available") Note that the methods of a pool should only ever be used by the process which created it. @@ -2053,13 +2068,14 @@ The following example demonstrates the use of a pool:: from multiprocessing import Pool + import time def f(x): return x*x if __name__ == '__main__': 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(pool.map(f, range(10))) # prints "[0, 1, 4,..., 81]" @@ -2069,9 +2085,8 @@ print(next(it)) # prints "1" print(it.next(timeout=1)) # prints "4" unless your computer is *very* slow - import time 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: