joblib.Parallel通过挂在Windows上的spyder

时间:2016-01-15 23:57:58

标签: python python-3.x spyder joblib

我正在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文件不同的工作目录有关。排队,这是有效的。

1 个答案:

答案 0 :(得分:6)

Spyder dev here )如果此问题是由runfile设置工作目录引起的,您可以通过转到菜单项来防止这种情况发生

Run > Configuration per file

(或按Ctrl+F6)并选择名为当前工作目录的选项

备注

  1. 为每个文件保存运行配置,Spyder在重新启动后会记住它。
  2. Spyder 3.2 及以上版本的答案已更新。