7

多くの .py ファイル (test_1.py、test_2.py など) を含むディレクトリがあります。それぞれのファイルは、nose で使用できるように適切に記述されています。したがって、nosetests スクリプトを実行すると、すべての .py ファイル内のすべてのテストが検出され、実行されます。

すべての .py ファイル内のすべてのテストが並列化可能として処理され、ワー​​カー プロセスに委任されるように、それらを並列化したいと考えています。

デフォルトでは、次のことを行っているようです:

nosetests --processes=2 

並列処理がまったく導入されず、すべての .py ファイルにわたるすべてのテストが 1 つのプロセスで実行されます。

各 .py ファイルに _multiprocess_can_split_ = True を入れてみましたが、違いはありません

ご意見ありがとうございます。

4

1 に答える 1

12

鼻、実際にはマルチプロセスプラグインは、テストを並行して実行するようです。注意点は、その動作方法では、複数のプロセスでテストを実行できなくなる可能性があることです。プラグインはテスト キューを作成し、複数のプロセスを生成してから、各プロセスがキューを同時に消費します。プロセスごとにテスト ディスパッチがないため、テストが非常に高速に実行されている場合、同じプロセスで実行される可能性があります。

次の例は、この動作を示しています。

ファイル test1.py

import os
import unittest

class testProcess2(unittest.TestCase):

    def test_Dummy2(self):
        self.assertEqual(0, os.getpid())

ファイル test2.py

import os
import unittest

class testProcess2(unittest.TestCase):

    def test_Dummy2(self):
        self.assertEqual(0, os.getpid())

noisetests --processes=2 の出力を実行します (プロセス ID が同じであることに注意してください)

FF
======================================================================
FAIL: test_Dummy2 (test1.testProcess2)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\temp\test1.py", line 7, in test_Dummy2
    self.assertEqual(0, os.getpid())
AssertionError: 0 != 94048

======================================================================
FAIL: test_Dummy1 (test2.testProcess1)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\temp\test2.py", line 8, in test_Dummy1
    self.assertEqual(0, os.getpid())
AssertionError: 0 != 94048

----------------------------------------------------------------------
Ran 2 tests in 0.579s

FAILED (failures=2)

テストの 1 つにスリープを追加すると、

import os
import unittest
import time

class testProcess2(unittest.TestCase):

    def test_Dummy2(self):
        time.sleep(1)
        self.assertEqual(0, os.getpid())

取得します(プロセスIDが異なることに注意してください)

FF
======================================================================
FAIL: test_Dummy1 (test2.testProcess1)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\temp\test2.py", line 8, in test_Dummy1
    self.assertEqual(0, os.getpid())
AssertionError: 0 != 80404

======================================================================
FAIL: test_Dummy2 (test1.testProcess2)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\temp\test1.py", line 10, in test_Dummy2
    self.assertEqual(0, os.getpid())
AssertionError: 0 != 92744

----------------------------------------------------------------------
Ran 2 tests in 1.422s

FAILED (failures=2)
于 2010-09-15T14:02:19.440 に答える