I decided to spend this morning to get my head around multi-processing,
and decided to try to experiment initially in the command line
interpreter, using the Python 3 documentation
<https://docs.python.org/3/library/multiprocessing.html?highlight=process#multiprocessing.pool.Pool>
I fired up Python 3.6 and ran this :
Python 3.6.6 (default, Sep 12 2018, 18:26:19)
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from multiprocessing import Pool
>>> def f(x):
... return x*2 + 1
...
>>> with Pool(10) as p:
... print(p.map(f, range(1,100)))
...
[3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37,
39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71,
73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99, 101, 103,
105, 107, 109, 111, 113, 115, 117, 119, 121, 123, 125, 127, 129,
131, 133, 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155,
157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181,
183, 185, 187, 189, 191, 193, 195, 197, 199]
As you can see - it clearly worked as expected - queue a happy dance.
I continued to read the documentation and came to this quote :
/Functionality within this package requires that the
//|__main__|//module be importable by the children. This is covered
in //Programming guidelines
<https://docs.python.org/3/library/multiprocessing.html?highlight=process#multiprocessing-programming>//however
it is worth pointing out here. This means that some examples, such
as the //|multiprocessing.pool.Pool|
<https://docs.python.org/3/library/multiprocessing.html?highlight=process#multiprocessing.pool.Pool>//examples
will not work in the interactive interpreter./
The Documentation then gives a clear example very similar to mine :
>>> from multiprocessing import Pool >>> p = Pool(5) >>> def f(x): ...
return x*x ... >>> p.map(f, [1,2,3]) Process PoolWorker-1: Process
PoolWorker-2: Process PoolWorker-3: Traceback (most recent call
last): AttributeError: 'module' object has no attribute 'f'
AttributeError: 'module' object has no attribute 'f' AttributeError:
'module' object has no attribute 'f'
But when I run this exact example in the command line interpreter it
works fine :
>>> p = Pool(5)
>>> def f(x):
... return x*x
...
>>> p.map(f,[1,2,3])
[3, 5, 7]
Is the documentation wrong ? is something weird going on ?
--
Anthony Flury
*Email* : anthony.fl...@btinternet.com <mailto:anthony.fl...@btinternet.com>
*Twitter* : @TonyFlury <https://twitter.com/TonyFlury/>
--
https://mail.python.org/mailman/listinfo/python-list