joblib.Parallel通过spyder挂在Windows上运行

Cha*_*les 3 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
Run Code Online (Sandbox Code Playgroud)

代码 main.py

from tpackage import AClass

def go():
    x = AClass().AFunction()
    return x
if __name__ == '__main__':
    x = go()
    print(x)
Run Code Online (Sandbox Code Playgroud)

代码 __init__.py

from .amodule import AClass

__all__ = ['AClass']
Run Code Online (Sandbox Code Playgroud)

代码 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
Run Code Online (Sandbox Code Playgroud)

这与if __name__ == '__main__':声明的需要有关吗?我不认为我会需要这个,因为它Parallel已经在def语句中受到保护,并且只__main__调用模块时运行,这应该只发生一次.

我应该补充说,如果我换n_jobs=1amodule.py,一切都很好.

更新:

因此,经过进一步审查,似乎这可能与spyder有关.我正在使用spyder 2.3.8.当我有spyder执行这是一个专用的窗口,它的工作原理.但是当它在交互式IPython控制台中运行时,它会失败.我也可以直接从命令行运行程序而不会出现问题.

更新2:

经过进一步审查,这确实与IPython在*.py文件之外的工作目录中有关.排队,这是有效的.

Car*_*oba 6

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

Run > Configuration per file
Run Code Online (Sandbox Code Playgroud)

(或按Ctrl+F6)并选择名为The current working directory的选项.

备注:

  1. 为每个文件保存运行配置,Spyder在重新启动后会记住它.
  2. 答案已针对Spyder 3.2及更高版本进行了更新.