def test_async_single_manager_tables_chained(self): columns = {"index": int, "num1": int, "num2": int} manager = PerspectiveManager() tbl = Table(columns, index="index") view = tbl.view() tbl2 = Table(view.to_arrow(), index=tbl.get_index()) manager.host(tbl, "tbl") manager.host(tbl2, "tbl2") view.on_update(lambda port, delta: tbl2.update(delta), "row") manager.set_loop_callback(TestAsync.loop.add_callback) for i in range(1000): manager.call_loop(tbl.update, [{ "index": i, "num1": i, "num2": 2 * i }]) i += 1 q = queue.Queue() manager.call_loop(q.put, True) q.get() @syncify def _tbl_task2(): size = tbl2.size() return size assert _tbl_task2() == 1000 view.delete() tbl.delete() tbl2.delete()
def test_async_call_loop(self): tbl = Table({"a": int, "b": float, "c": str}) manager = PerspectiveManager() manager.set_loop_callback(TestAsync.loop.add_callback) manager.call_loop(tbl.update, data) manager.host(tbl) @syncify def _task(): return tbl.size() assert _task() == 10 tbl.delete()
def test_async_call_loop_error_if_no_loop(self): tbl = Table({"a": int, "b": float, "c": str}) manager = PerspectiveManager() with raises(PerspectiveError): # loop not set - errors manager.call_loop(tbl.update, data) manager.set_loop_callback(TestAsync.loop.add_callback) manager.call_loop(tbl.update, data) manager.host(tbl) @syncify def _task(): return tbl.size() # subsequent calls to call_loop will work if loop_callback is set. assert _task() == 10 tbl.delete()