2015-05-07 86 views
1

最近我开始在使用brian2运行并行神经网络模拟时收到SyntaxError。当它试图评估高速缓存文件中的代码行时,会通过调用scipy.weave.inline来引发这些问题。scipy.weave.inline竞赛条件

该问题的完整描述和我对其原因的猜测是here

here是我前面提到的一个相关问题的链接,其中一个错误是完整的堆栈跟踪。我对这个问题的回答只是一个临时解决方案。 (只要执行一组新的并行运行,就会重新引入语法错误。)

是否有避免这种竞争状态的简单方法?

+0

只是为了澄清,这是一个由用户代码抛出的运行时'SyntaxError',而不是python解释器? – amccormack

+0

@amccormack解释器正在提出错误 - 即,我的代码,brian2和scipy都不会明确地提出错误。它会在'scipy.weave'内调用'eval(line)'时出现,其中'line'是来自其中一个缓存文件的行。 – dbliss

+0

我对scipy一无所知,所以我无法提供任何有关避免实际问题的见解。 'eval'意味着它基于正在生成的代码,这正是我想澄清的,所以我们可以排除一个实际存在错误的.py文件。 – amccormack

回答

1

这似乎是scipy中的已知错误:请参阅thisthis关于github的讨论。这些讨论中提出了一些解决方法:

1)执行一次脚本运行 - 以便缓存文件被填充 - 然后并行执行其他运行。并行运行不会尝试重新填充缓存。

2)制作一个从/tmp~/.python27_compiled的符号链接。 (我不知道为什么这会起作用。)

3)改为使用cython