joblib.Parallel通过Windows上悬挂的spyder运行
问题内容:
我正在Windows Server 2013上运行Python 3.5.1。我有一些令人尴尬的并行任务,它们似乎在Python
2.7上使用基本相同的代码工作,但是我无法弄清楚如何使其在Python 3.5.1上运行。
我正在使用Anaconda 2.4.1
代码看起来像这样…我已经将其简化为最低限度。
\
->main.py
\apackage\
->__init__.py
->amodule.py
代码为 main.py
from tpackage import AClass
def go():
x = AClass().AFunction()
return x
if __name__ == '__main__':
x = go()
print(x)
代码为 __init__.py
from .amodule import AClass
__all__ = ['AClass']
代码为 amodule.py
from joblib import Parallel, delayed
class AClass(object):
def AFunction(self):
x = Parallel(n_jobs=2,verbose=100)(
delayed(add1)(i) for i in range(10)
)
return x
def add1(x):
return x + 1
这与if __name__ == '__main__':
声明的需要有关吗?我不认为我会需要它,因为已经Parallel
在def
语句内保护了,并且仅 应
在__main__
调用模块时运行,而该模块只能发生一次。
我要补充一点,如果我改变n_jobs=1
的amodule.py
,一切工作正常。
更新:
因此,在进一步审查之后,看来这可能与spyder有关。我正在使用spyder
2.3.8。当我执行spyder时,这是一个专用窗口,它可以工作。但是,当它在交互式IPython控制台中运行时,它将失败。我也可以直接从命令行运行程序而不会出现问题。
更新2:
经过进一步检查,这确实与IPython位于与* .py文件不同的工作目录中有关。让那些排队,这行得通。
问题答案:
( 此处为Spyder dev )如果此问题是由runfile
设置工作目录引起的,则可以通过转到菜单条目来防止这种情况发生
Run > Configuration per file
(或按Ctrl+F6
)并选择名为 当前工作目录 的选项。
注意事项 :
- 将为每个文件保存运行配置,Spyder会在重新启动后记住该配置。
- Spyder 3.2 及更高版本的答案已更新。