code: def test_async_multiple_managers_queue_process_multiple_ports(self):
      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.set_loop_callback(TestAsync.loop.add_callback)
      manager2.set_loop_callback(TestAsync.loop.add_callback)
  
      @syncify
      def _task():
          random.shuffle(port_ids)
          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)
              tbl2.update([port_data[idx]], port_id=port_id)
          return (tbl.size(), tbl2.size())
  
      assert _task() == (11, 11)
  
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 13 for calling the TestAsync obj's underlying member method code with example usage: obj.test_async_multiple_managers_queue_process_multiple_ports() and returns: tbl,  tbl2