2015-05-07 1 views
1

Недавно я начал получать SyntaxError с при параллельном имитации нейронной сети с использованием brian2. Они поднимаются вызовами scipy.weave.inline, когда он пытается оценить строки кода в файле кеша.Состояние гонки с scipy.weave.inline

Полное описание проблемы и моя догадка по ее причине: here.

И here - это ссылка на связанный с этим вопрос, который я задал ранее, с полной стеком для одной из ошибок. Мой ответ на этот вопрос дает лишь временное решение. (Ошибки синтаксиса повторно вводятся, как только выполняется новый набор параллельных запусков.)

Есть ли простой способ избежать этого состояния гонки?

+0

Чтобы уточнить, это время выполнения 'SyntaxError', которое вызывается кодом пользователя, а не интерпретатором python? – amccormack

+0

@amccormack ошибка выводится интерпретатором - то есть ни мой код, ни 'brian2', ни' scipy' явно не вызывают ошибку. это происходит, когда 'eval (line)' вызывается внутри 'scipy.weave', где' line' является строкой из одного из файлов кеша. – dbliss

+0

Я ничего не знаю о scipy, поэтому я не могу представить, как избежать фактической проблемы. «Eval» означает, что он основан на генерации кода на лету, и это то, что я пытался уточнить, поэтому мы могли бы исключить файл .py, на самом деле имевший ошибку. – amccormack

ответ

1

Это, как представляется, известная ошибка в scipy: См. this и this обсуждение на github. В этих обсуждениях предлагаются некоторые обходные пути:

1) Выполните один запуск сценария - чтобы файл кэша был заполнен, а затем выполните остальные прогоны параллельно. Параллельные прогоны не будут пытаться повторно заполнить кеш.

2) Сделать символическую ссылку от /tmp до ~/.python27_compiled. (Я не уверен, почему это сработает.)

3) Вместо этого используйте cython.