1

我试图了解如何使用 Pathos 包来运行调用函数的函数。我的理解是 Pathos 相对于主要的多处理包的优势在于它允许函数内部的函数。但是,我似乎无法让它工作。这是我能想到的最简单的例子:

def testf(x):
    print(x)

import dill
import pathos
from pathos.multiprocessing import ProcessingPool
pool = ProcessingPool(nodes=3)
out2 = pool.map(testf, [1,2,3,4,5,6,7,8,9])
pool.close()

输出:

multiprocess.pool.RemoteTraceback: 
"""
Traceback (most recent call last):
  File "/home/james/.local/lib/python3.6/site-packages/multiprocess/pool.py", line 119, in worker
    result = (True, func(*args, **kwds))
  File "/home/james/.local/lib/python3.6/site-packages/multiprocess/pool.py", line 44, in mapstar
    return list(map(*args))
  File "/home/james/.local/lib/python3.6/site-packages/pathos/helpers/mp_helper.py", line 14, in <lambda>
    func = lambda args: f(*args)
  File "<input>", line 2, in testf
NameError: name 'print' is not defined
"""
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "<input>", line 5, in <module>
  File "/home/james/.local/lib/python3.6/site-packages/pathos/multiprocessing.py", line 136, in map
    return _pool.map(star(f), zip(*args)) # chunksize
  File "/home/james/.local/lib/python3.6/site-packages/multiprocess/pool.py", line 260, in map
return self._map_async(func, iterable, mapstar, chunksize).get()
  File "/home/james/.local/lib/python3.6/site-packages/multiprocess/pool.py", line 608, in get
raise self._value
NameError: name 'print' is not defined

编辑:似乎如果我将此代码粘贴到 shell 控制台中,它工作正常。如果我从我选择的 IDE PyCharm 中运行它,那就没有任何问题了。所以现在我的问题是为什么相同的代码在相同版本的python解释器(3.6.1)中的工作方式不同,具体取决于它是从shell还是应用内控制台运行/

4

0 回答 0