def test_put(self):
        obj = MultiprocessingDropbox()
        obj.open()

        result1 = MockResult('task1')
        task1 = MockTask(result1, 0.003)
        package1 = TaskPackage(task=task1, args=(), kwargs={})
        obj.put(package1)

        result2 = MockResult('task2')
        task2 = MockTask(result2, 0.001)
        package2 = TaskPackage(task=task2, args=(), kwargs={})
        obj.put(package2)

        obj.close()
    def test_receive_without_put(self):
        obj = MultiprocessingDropbox()
        obj.open()

        self.assertEqual([], obj.receive())

        obj.close()
    def test_receive_order(self):
        # results of tasks are sorted in the order in which the tasks
        # are put.

        obj = MultiprocessingDropbox()
        obj.open()

        result1 = MockResult('task1')
        task1 = MockTask(result1, 0.010)
        package1 = TaskPackage(task=task1, args=(), kwargs={})
        obj.put(package1)

        result2 = MockResult('task2')
        task2 = MockTask(result2, 0.001)
        package2 = TaskPackage(task=task2, args=(), kwargs={})
        obj.put(package2)

        result3 = MockResult('task3')
        task3 = MockTask(result3, 0.005)
        package3 = TaskPackage(task=task3, args=(), kwargs={})
        obj.put(package3)

        actual = [r.data for r in obj.receive()]
        self.assertEqual(['task1', 'task2', 'task3'], actual)

        obj.close()
    def test_put_receive(self):
        obj = MultiprocessingDropbox()
        obj.open()

        result1 = MockResult('task1')
        task1 = MockTask(result1, 0.003)
        package1 = TaskPackage(task=task1, args=(), kwargs={})
        obj.put(package1)

        result2 = MockResult('task2')
        task2 = MockTask(result2, 0.001)
        package2 = TaskPackage(task=task2, args=(), kwargs={})
        obj.put(package2)

        actual = [r.data for r in obj.receive()]
        self.assertEqual(set(['task1', 'task2']), set(actual))

        obj.close()
 def test_open_open_close(self):
     obj = MultiprocessingDropbox()
     obj.open()
     obj.open()  # don't create workers again
     obj.close()
 def test_open_close(self):
     obj = MultiprocessingDropbox()
     obj.open()
     obj.close()
 def test_repr(self):
     obj = MultiprocessingDropbox()
     repr(obj)
    def test_task_without_ProgressReporterno(self):
        progressMonitor = MockProgressMonitor()
        obj = MultiprocessingDropbox(nprocesses=3,
                                     progressMonitor=progressMonitor)
        obj.open()

        result1 = MockResult('task1')
        task1 = MockTaskWithArguments(result1, 0.003)
        package1 = TaskPackage(task=task1, args=(111, 222, 333), kwargs={})
        obj.put(package1)

        result2 = MockResult('task2')
        task2 = MockTaskWithArguments(result2, 0.001)
        package2 = TaskPackage(task=task2, args=(444, 555), kwargs=dict(C=666))
        obj.put(package2)

        result3 = MockResult('task3')
        task3 = MockTaskWithArgumentsAndProgressReporter(result3, 0.001)
        package3 = TaskPackage(task=task3, args=(777, 888), kwargs=dict(C=999))
        obj.put(package3)

        # the results in the main process don't have the attributes
        self.assertFalse(hasattr(result1, 'A'))
        self.assertFalse(hasattr(result1, 'B'))
        self.assertFalse(hasattr(result1, 'C'))

        self.assertFalse(hasattr(result2, 'A'))
        self.assertFalse(hasattr(result2, 'B'))
        self.assertFalse(hasattr(result2, 'C'))

        self.assertFalse(hasattr(result3, 'A'))
        self.assertFalse(hasattr(result3, 'B'))
        self.assertFalse(hasattr(result3, 'C'))
        self.assertFalse(hasattr(result3, 'progressReporter'))

        # the results returned from other processes do.
        returnedResults = obj.receive()
        self.assertEqual('task1', returnedResults[0].data)
        self.assertEqual(111, returnedResults[0].A)
        self.assertEqual(222, returnedResults[0].B)
        self.assertEqual(333, returnedResults[0].C)

        self.assertEqual('task2', returnedResults[1].data)
        self.assertEqual(444, returnedResults[1].A)
        self.assertEqual(555, returnedResults[1].B)
        self.assertEqual(666, returnedResults[1].C)

        self.assertEqual('task3', returnedResults[2].data)
        self.assertEqual(777, returnedResults[2].A)
        self.assertEqual(888, returnedResults[2].B)
        self.assertEqual(999, returnedResults[2].C)
        self.assertIsInstance(returnedResults[2].progressReporter,
                              MockProgressReporter)

        obj.close()
    def test_ProgressMonitor(self):
        progressMonitor = MockProgressMonitor()
        obj = MultiprocessingDropbox(nprocesses=3,
                                     progressMonitor=progressMonitor)
        obj.open()

        result1 = MockResult('task1')
        task1 = MockTaskWithProgressReporter(result1, 0.003)
        package1 = TaskPackage(task=task1, args=(), kwargs={})
        obj.put(package1)

        result2 = MockResult('task2')
        task2 = MockTaskWithProgressReporter(result2, 0.001)
        package2 = TaskPackage(task=task2, args=(), kwargs={})
        obj.put(package2)

        # the results in the main process don't have a ProgressReporter
        self.assertFalse(hasattr(result1, "progressReporter"))
        self.assertFalse(hasattr(result2, "progressReporter"))

        # the results returned from other processes do.
        returnedResults = obj.receive()
        self.assertIsInstance(returnedResults[0].progressReporter,
                              MockProgressReporter)
        self.assertIsInstance(returnedResults[1].progressReporter,
                              MockProgressReporter)

        obj.close()
    def test_begin_put_recive_end_repeat(self):
        obj = MultiprocessingDropbox()
        obj.open()

        result = MockResult('task1')
        task = MockTask(result, 0.003)
        package = TaskPackage(task=task, args=(), kwargs={})
        obj.put(package)

        obj.receive()

        obj.close()

        obj.open()

        result = MockResult('task2')
        task = MockTask(result, 0.003)
        package = TaskPackage(task=task, args=(), kwargs={})
        obj.put(package)

        obj.receive()

        obj.close()