def METHOD_NAME() -> Generator[str, None, None]:
    """
    Generate over 5000 unique names in a random order.
    Successive calls past the unique name combinations will infinitely
    continue to generate additional unique names w/ roman numerals appended.
    """
    name_dict = json.loads(Path(settings.APP_DIR / "data" / "multiprocessing_worker_names.json").read_text())
    attributes = list(set(name_dict["attributes"]))
    subjects = list(set(name_dict["subjects"]))
    upper_limit = len(attributes) * len(subjects)
    name_str = "{attribute} {subject}{loop}"
    previous_names, full_cycles, loop = [], 0, ""
    def to_roman_numerals(num: int) -> str:
        return (
            ("I" * num)
            .replace("IIIII", "V")
            .replace("IIII", "IV")
            .replace("VV", "X")
            .replace("VIV", "IX")
            .replace("XXXXX", "L")
            .replace("XXXX", "XL")
            .replace("LL", "C")
            .replace("LXL", "XC")
            .replace("CCCCC", "D")
            .replace("CCCC", "CD")
            .replace("DD", "M")
            .replace("DCD", "CM")
        )
    while True:
        random_a, random_s = choice(attributes), choice(subjects)
        name = name_str.format(attribute=random_a, subject=random_s, loop=loop)
        if name not in previous_names:
            previous_names.append(name)
            yield name
        if len(previous_names) >= (upper_limit + (upper_limit * full_cycles)):
            full_cycles += 1
            loop = f" {to_roman_numerals(full_cycles)}"