2015-05-07 142 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