docstr: After `process` completes internally, this method is called by the
  C++ with a `port_id`, indicating the port on which the update was
  processed.
  
  Arguments:
      port_id (:obj:`int`): an int indicating which port the update
      came from.
docstr_tok: ["After","`","process","`","completes","internally",",","this","method","is","called","by","the","C++","with","a","`","port_id","`",",","indicating","the","port","on","which","the","update","was","processed",".","Arguments",":","port_id","(",":","obj",":","`","int","`",")",":","an","int","indicating","which","port","the","update","came","from","."]
code: def _update_callback(self, port_id):
      """After `process` completes internally, this method is called by the
      C++ with a `port_id`, indicating the port on which the update was
      processed.
  
      Arguments:
          port_id (:obj:`int`): an int indicating which port the update
          came from.
      """
      cache = {}
      for callback in self._update_callbacks:
          callback["callback"](port_id=port_id, cache=cache)
  
imports: from datetime import date, datetime
  from ..core.exception import PerspectiveError
  from ._accessor import _PerspectiveAccessor
  from ._callback_cache import _PerspectiveCallBackCache
  from ._date_validator import _PerspectiveDateValidator
  from ._state import _PerspectiveStateManager
  from ._utils import _dtype_to_pythontype, _dtype_to_str, _parse_expression_inputs, _str_to_pythontype
  from .libpsppy import make_table, update_table, str_to_filter_op, t_dtype, t_filter_op, t_op, validate_expressions
  from .view import View
label_desc: Use image node_id 22 for calling the Table obj's underlying member method code with example usage: obj._update_callback(port_id) without return types