Produce a list of all services and their addresses in a group
    
    A group is an optional form of namespace within the discovery mechanism.
    If an advertised name has the form <group><sep><name> it is deemed to
    belong to <group>. Note that the service's name is still the full
    string <group><sep><name>. The group concept is simply for discovery and
    to assist differentiation, eg, in a classroom group.
    
    :param group: the name of a group prefix
    :param separator: the separator character [/]
    :param exclude: an iterable of names to exclude (or None)
    
    :returns: a list of 2-tuples [(name, address), ...]

def discover_group(group, separator="/", exclude=None):
    """Produce a list of all services and their addresses in a group
    
    A group is an optional form of namespace within the discovery mechanism.
    If an advertised name has the form <group><sep><name> it is deemed to
    belong to <group>. Note that the service's name is still the full
    string <group><sep><name>. The group concept is simply for discovery and
    to assist differentiation, eg, in a classroom group.
    
    :param group: the name of a group prefix
    :param separator: the separator character [/]
    :param exclude: an iterable of names to exclude (or None)
    
    :returns: a list of 2-tuples [(name, address), ...]
    """
    _start_beacon()
    if exclude is None:
        names_to_exclude = set()
    else:
        names_to_exclude = set(exclude)
    all_discovered = _rpc("discover_all")
    return [(name, address) 
        for (name, address) in all_discovered 
        if name.startswith("%s%s" % (group, separator))
        and name not in names_to_exclude
    ]