Почему RSpec является настолько медленным под направляющими?

В Python3 я могу сделать:

In [224]: txt = "Côte d'Ivoire"
In [225]: x = np.zeros((2,),dtype='U20')
In [226]: x[0] = txt
In [227]: x
Out[227]: 
array(["Côte d'Ivoire", ''],   dtype='<U20')

Это означает, что я, вероятно, мог бы открыть файл UTF-8 (обычный, а не байтовый режим) и строки чтения и назначить их элементам массив x.

Но genfromtxt настаивает на работе с байтовыми строками (ascii), которые не могут обрабатывать большой UTF-8 набор (7 байт v 8). Поэтому мне нужно применить decode в какой-то момент, чтобы получить массив U.

Я могу загрузить его в массив 'S' с помощью genfromtxt:

In [258]: txt="Côte d'Ivoire"
In [259]: a=np.genfromtxt([txt.encode()],delimiter=',',dtype='S20')
In [260]: a
Out[260]: 
array(b"C\xc3\xb4te d'Ivoire",  dtype='|S20')

и примените decode к отдельным элементам:

In [261]: print(a.item().decode())
Côte d'Ivoire

In [325]: print _
Côte d'Ivoire

Или используйте np.char.decode, чтобы применить его к каждому элементу массива:

In [263]: np.char.decode(a)
Out[263]: 
array("Côte d'Ivoire", dtype='<U13')
In [264]: print(_)
Côte d'Ivoire

genfromtxt позволяет мне укажите converters:

In [297]: np.genfromtxt([txt.encode()],delimiter=',',dtype='U20',
    converters={0:lambda x: x.decode()})
Out[297]: 
array("Côte d'Ivoire", dtype='<U20')

Если csv имеет сочетание строк и цифр, этот converters подход будет более простым в использовании, чем np.char.decode. Просто укажите конвертер для каждого столбца строки.

(см. Мои предыдущие изменения для попыток Python2).

44
задан James A. Rosen 25 September 2008 в 06:11
поделиться

10 ответов

Необходимо быть в состоянии для ускорения Вашего script/spec вызовы путем выполнения script/spec_server в отдельном окне терминала, затем добавления дополнительного -X параметр к вызовам спецификации.

22
ответ дан Scott Matthewman 23 September 2019 в 11:37
поделиться

, потому что это загружает весь environement, приспособления загрузок и весь тот джаз.

настоящий преступник - то, если Вы выполняете его с помощью rake spec, это работает db:test:prepare задача .

, Эта задача отбрасывает всю тестовую базу данных и воссоздает ее с нуля. Это кажется смешным мне, но это - то, что это делает (то же самое происходит, когда Вы работаете rake:test:units и т.д.).

можно легко работать вокруг этого использования spec приложение, которое rspec устанавливает как часть rspec драгоценного камня.

Как это:

cd railsapp
spec spec # run all specs without rebuilding the whole damn database
spec spec/models # run model specs only

cd spec
spec controllers/user* # run specs for controllers that start with user
4
ответ дан Orion Edwards 23 September 2019 в 11:37
поделиться

Запущение тестов может быть действительно медленным, потому что целая среда направляющих должна загрузиться (попробуйте сценарий/консоль), и только тогда может весь тестовый прогон. Необходимо использовать автотест , который сохраняет среду загруженной и проверит, какие файлы Вы редактируете. Когда Вы отредактируете и сохранили файл, только тесты, которые зависят от них, будут работать автоматически и быстро.

3
ответ дан Marc-André Lafortune 23 September 2019 в 11:37
поделиться

Я думаю опыт "дзэн", который Вы ищете, должен работать spec_server и autospec в фоновом режиме, с результатом, являющимся почти мгновенными тестами, когда Вы сохранили файл.

Однако у меня есть проблемы, заставляя эти две программы связаться.

я нашел объяснение здесь :

я заметил, что автотест не отправляет команды в spec_server. Вместо этого это перезагружает всю среду направляющих и плагины Вашего приложения каждый раз, это выполняется. Это заставляет автотест работать значительно медленнее, чем сервер сценария, потому что, когда Вы работаете, сценарий/спецификация управляет, чтобы спецификации были отправлены в spec_server, которому уже разожгли Вашу среду направляющих и готовый пойти. Если Вы, оказывается, устанавливаете новый плагин или что-то как этот, то необходимо будет перезапустить spec_server.

, Но, как мы устраняем эту проблему? Я предполагаю, что это включило бы загрузку ZenTest и изменение кода для autotest программа, но не имеет времени для испытания его прямо сейчас.

4
ответ дан Nappy 23 September 2019 в 11:37
поделиться

Вы выполняете это по направляющим? Если так, это не инициализация RSPEC, это медленно, это - направляющие. Направляющие должны инициализировать всю кодовую базу и Ваш прежде, чем выполнить спецификации. Ну, это не делает , имеют к, но это делает. RSpec работает довольно быстро за мной в соответствии с моими маленькими проектами ненаправляющих.

3
ответ дан Loren Segal 23 September 2019 в 11:37
поделиться

Если Вы используете Mac, я рекомендую использовать Rspactor по автотесту, поскольку это использует намного меньше ресурсов для опроса измененных файлов, чем автотест. Существует оба полная версия

RSpactor.app

Какао или версия драгоценного камня, которую я поддерживаю в Github

sudo gem install pelle-rspactor

, В то время как они не ускоряют отдельные тесты rspec, они чувствуют себя намного быстрее как они автоматическое выполнение затронутая спецификация в течение секунды после Вас, удар сохраняет.

2
ответ дан Pelle 23 September 2019 в 11:37
поделиться

Если Вы находитесь на среде Windows тогда существует, вероятно, мало, можно сделать, поскольку направляющие, кажется, запускаются действительно медленно в соответствии с Windows. Я имел тот же опыт в Windows и должен был переместить мою установку в VM Linux для создания его действительно быстрым (я также использовал автотест).

1
ответ дан DEfusion 23 September 2019 в 11:37
поделиться

, Почему является настолько медленным rspec? , потому что это загружает весь environement, приспособления загрузок и весь тот джаз.

там способ ускорить начальную загрузку направляющих , Вы могли попытаться использовать насмешки вместо того, чтобы полагаться на базу данных, это на самом деле корректно для поблочного тестирования и определенно ускорит Ваши модульные тесты. Additionnaly с помощью сервера спецификации, как упомянуто Scott Matthewman может помочь, то же с автотестом от zentest, упомянутого , Marc-Andre Lafortune

Является там способом выбрать часть моего приложения для направляющих, в котором я нуждаюсь (например, ActiveRecord наполняют только), таким образом, это не загружает абсолютно все для запущения нескольких тестов? что относительно этого

rake test:recent 

я не уверен, как rspec задача интегрируется с этим, но Вы могли определенно использовать test:recent задачу в качестве шаблона, чтобы сделать то же с тестами rspec если.

rake test:rspec:recent

еще не существует

4
ответ дан Community 23 September 2019 в 11:37
поделиться

Начиная с rspec-rails-1.2.7, spec_server устарел в благосклонность драгоценного камня spork.

2
ответ дан 26 November 2019 в 22:06
поделиться

Основная причина в том, что по какой-то причине require принимает вечно в Windows.

Советы по ускорению: Кажется, теперь spork работает с окнами.

Вы можете попробовать «fast_require», который кеширует местоположения:

http://github.com/rdp/faster_require

GL. -rp

2
ответ дан 26 November 2019 в 22:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: