def test_finalizer(self): lst = [] f0 = futures.Future() f0.set_result(1) f0.set_finalizer(lst.append) self.assertTrue(f0.is_completed()) del f0 self.assertEqual(lst, [1]) lst.clear() f1 = futures.Future() f1.set_result(2) f1.get_result_nonblocking() f1.set_finalizer(lst.append) self.assertTrue(f1.is_completed()) del f1 self.assertEqual(lst, []) f2 = futures.Future() f2.set_result(3) self.assertTrue(f2.is_completed()) with self.assertLogs(futures.__name__, level='WARNING') as cm: del f2 self.assertIn( 'future is garbage-collected but result is never consumed:', '\n'.join(cm.output), )
def test_completion_queue(self): f1 = futures.Future() f2 = futures.Future() f3 = futures.Future() queue = tasks.CompletionQueue() queue.put_nonblocking(f1) queue.put_nonblocking(f2) queue.put_nonblocking(f3) with self.assertRaises(tasks.Empty): queue.get_nonblocking() f2.set_result(None) self.assertIs(queue.get_nonblocking(), f2) f3.set_result(None) self.assertIs(queue.get_nonblocking(), f3) f1.set_result(None) self.assertIs(queue.get_nonblocking(), f1)
def test_future(self): future = futures.Future() callback = unittest.mock.MagicMock() future.add_callback(callback) self.assertFalse(future.is_completed()) callback.assert_not_called() with self.assertRaisesRegex(AssertionError, r'expect true'): future.get_result_nonblocking() with self.assertRaisesRegex(AssertionError, r'expect true'): future.get_exception_nonblocking() future.set_result(42) self.assertTrue(future.is_completed()) callback.assert_called_once_with(future) self.assertEqual(future.get_result_nonblocking(), 42) self.assertEqual(kernels.run(future.get_result()), 42) self.assertIsNone(future.get_exception_nonblocking()) self.assertIsNone(kernels.run(future.get_exception())) another_callback = unittest.mock.MagicMock() future.add_callback(another_callback) another_callback.assert_called_once_with(future)
async def _send(self, request, *, priority, **kwargs): future = futures.Future() await self._queue.put( TaggedItem(priority=priority, item=(request, kwargs, future))) return await (await future.get_result()).get_result()
def test_cancel(self): future = futures.Future() future.cancel() self.assertTrue(future.is_completed()) self.assertIsInstance(future.get_exception_nonblocking(), tasks.Cancelled)