code: 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()
  
imports: import queue
  import random
  import threading
  from functools import partial
  import tornado.ioloop
  from perspective import PerspectiveError, PerspectiveManager, Table
  from pytest import raises
label_desc: Use image node_id 11 for calling the TestAsync obj's underlying member method code with example usage: obj.test_async_single_manager_tables_chained() and returns: size