def test_concurrent_update_and_checkpoint(self): mmsc = MinMaxSumCountAggregator() checkpoint_total = MinMaxSumCountAggregator._TYPE(2**32, 0, 0, 0) with concurrent.futures.ThreadPoolExecutor(max_workers=1) as ex: fut = ex.submit(self.call_update, mmsc) while not fut.done(): mmsc.take_checkpoint() checkpoint_total = MinMaxSumCountAggregator._merge_checkpoint( checkpoint_total, mmsc.checkpoint) mmsc.take_checkpoint() checkpoint_total = MinMaxSumCountAggregator._merge_checkpoint( checkpoint_total, mmsc.checkpoint) self.assertEqual(checkpoint_total, fut.result())
def test_concurrent_update(self): mmsc = MinMaxSumCountAggregator() with concurrent.futures.ThreadPoolExecutor(max_workers=2) as ex: fut1 = ex.submit(self.call_update, mmsc) fut2 = ex.submit(self.call_update, mmsc) ret1 = fut1.result() ret2 = fut2.result() update_total = MinMaxSumCountAggregator._merge_checkpoint( ret1, ret2) mmsc.take_checkpoint() self.assertEqual(update_total, mmsc.checkpoint)
def test_merge(self): mmsc1 = MinMaxSumCountAggregator() mmsc2 = MinMaxSumCountAggregator() checkpoint1 = MinMaxSumCountAggregator._TYPE(3, 150, 101, 3) checkpoint2 = MinMaxSumCountAggregator._TYPE(1, 33, 44, 2) mmsc1.checkpoint = checkpoint1 mmsc2.checkpoint = checkpoint2 mmsc1.merge(mmsc2) self.assertEqual( mmsc1.checkpoint, MinMaxSumCountAggregator._merge_checkpoint(checkpoint1, checkpoint2), )