code: def test_async_multiple_managers_mixed_queue_process_multiple_ports(
      self,
  ):
      sentinel = {"async": 0, "sync": 0}
  
      def _counter(key, f, *args, **kwargs):
          sentinel[key] += 1
          return f(*args, **kwargs)
  
      sync_process = partial(_counter, "sync")
      async_process = partial(
          TestAsync.loop.add_timeout, 1, _counter, "async"
      )
      tbl = Table({"a": int, "b": float, "c": str})
      tbl2 = Table({"a": int, "b": float, "c": str})
      port_ids = [0]
      port_data = [{"a": 0, "b": 0, "c": "0"}]
  
      for i in range(10):
          port_id = tbl.make_port()
          port_id2 = tbl2.make_port()
          assert port_id == port_id2
          port_ids.append(port_id)
          port_data.append(
              {"a": port_id, "b": port_id * 1.5, "c": str(port_id)}
          )
  
      manager = PerspectiveManager()
      manager2 = PerspectiveManager()
      manager.host_table("tbl", tbl)
      manager2.host_table("tbl2", tbl2)
  
      # manager uses tornado, manager2 is synchronous
      manager.set_loop_callback(async_process)
      manager2.set_loop_callback(sync_process)
      random.shuffle(port_ids)
  
      @syncify
      def _task():
          for port_id in port_ids:
              idx = (
                  port_id
                  if port_id < len(port_ids)
                  else len(port_ids) - 1
              )
              tbl.update([port_data[idx]], port_id=port_id)
  
      _task()
      for port_id in port_ids:
          idx = (
              port_id if port_id < len(port_ids) else len(port_ids) - 1
          )
          tbl2.update([port_data[idx]], port_id=port_id)
  
      @syncify
      def _get_size():
          size = tbl.size()
          tbl.delete()
          return size
  
      assert _get_size() == 11
      assert tbl2.size() == 11
      assert sentinel["async"] == 1
      assert sentinel["sync"] == 11
      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 14 for calling the TestAsync obj's underlying member method code with example usage: obj.test_async_multiple_managers_mixed_queue_process_multiple_ports() and returns: f, size