code: def channel(self, channel_id=None, synchronous=False):
          
          if channel_id is None:
              # adjust for channel 0
              if len(self._channels) - 1 >= self._channel_max:
                  raise Connection.TooManyChannels(
                      "%d channels already open, max %d",
                      len(self._channels) - 1,
                      self._channel_max)
              channel_id = self._next_channel_id()
              while channel_id in self._channels:
                  channel_id = self._next_channel_id()
          elif channel_id in self._channels:
              return self._channels[channel_id]
          else:
              raise Connection.InvalidChannel(
                  "%s is not a valid channel id", channel_id)
  
          # Call open() here so that ConnectionChannel doesn't have it called.
          # Could also solve this other ways, but it's a HACK regardless.
          rval = Channel(
              self, channel_id, self._class_map, synchronous=synchronous)
          self._channels[channel_id] = rval
          rval.add_close_listener(self._channel_closed)
          rval.open()
          return rval
docs: Fetch a Channel object identified by the numeric channel_id, or
          create that object if it doesn't already exist.  If channel_id is not
          None but no channel exists for that id, will raise InvalidChannel.  If
          there are already too many channels open, will raise TooManyChannels.
  
          If synchronous=True, then the channel will act synchronous in all cases
          where a protocol method supports `nowait=False`, or where there is an
          implied callback in the protocol.