Тесты Python Nose из генератора не работают одновременно

Учитывая следующее:

from time import sleep

def runTest(a):
    sleep(1)
    assert a >= 0

def test_all():
    for i in range(5):
        yield (runTest, i)

Я ожидаю, что пять тестов будут запущены параллельно с nosetests --processes=8 и, таким образом, выполнятся примерно за одну секунду, однако для запуска требуется чуть более пяти секунд: кажется, что они выполняются последовательно, а не одновременно.

Согласно документации по носу, многопроцессорный плагин поддерживает генераторы тестов (как они называются в документации по носу) с версии 1.1: я использую нос 1.3.0, поэтому он должен поддерживаться. Добавление _multiprocess_can_split_ = True не имеет значения, как и следовало ожидать, поскольку приборы не используются.

Как мне заставить эти пять тестов выполняться одновременно?


person gsnedders    schedule 04.05.2013    source источник


Ответы (2)


По словам автора Nose, в списке рассылки, многопроцессорный плагин не работает с генераторами в 1.3 (известная ошибка), и он рекомендует придерживаться с 1.1, если это нужно для работы.

person gsnedders    schedule 07.05.2013

Вы можете попробовать

from time import sleep
from multiprocessing import Process

def runTest(a):
    sleep(1)
    assert a >= 0

def test_all():
    for i in range(5):
        Process(target=(yield (runTest, i))).start()
person kiriloff    schedule 04.05.2013
comment
Я бы предпочел понять, почему плагин многопроцессорности в носу не может одновременно запускать существующие тесты, а не распараллеливать их внешне по отношению к носу. - person gsnedders; 05.05.2013
comment
Я не знаю, какие настройки вы используете, но это решение вообще не работает. Все тесты запускаются в одном и том же процессе и запускаются последовательно. Это было сделано на носу 1.3 с использованием различных комбинаций многопроцессорных переменных и команд Nousetests. Проблемы, кажется, возникают при использовании yield. - person magixx; 23.09.2014