def METHOD_NAME(query_dict: dict,
                                    query_runner: Callable) -> Iterable[str]:
    logging.debug("[query_controller]: Creating pipe and forking a child to handle the query")
    read_fd, write_fd = os.pipe()
    # always flush stdout and stderr before calling fork(); someone could have turned off auto-flushing and we don't want double-output
    sys.stderr.flush()
    sys.stdout.flush()
    pid = os.fork()
    if pid == 0: # I am the child process
        sys.stdout = open('/dev/null', 'w')         # parent and child process should not share the same stdout stream object
        sys.stdin = open('/dev/null', 'r')          # parent and child process should not share the same stdin stream object
        os.close(read_fd)                   # child doesn't read from the pipe, it writes to it 
        resource.setrlimit(resource.RLIMIT_AS, (rlimit_child_process_bytes, rlimit_child_process_bytes))  # set a virtual memory limit for the child process
        signal.signal(signal.SIGPIPE, child_receive_sigpipe) # get rid of signal handler so we don't double-print to the log on SIGPIPE error
        signal.signal(signal.SIGCHLD, signal.SIG_IGN) # disregard any SIGCHLD signal in the child process
        try:
            with os.fdopen(write_fd, "w") as write_fo:  # child process needs to get a stream object for the file descriptor `write_fd`
                json_string_generator = query_runner(query_dict)
                for json_string in json_string_generator:
                    write_fo.write(json_string)
                    write_fo.flush()
        except BaseException as e:
            print(f"Exception in query_controller.run_query_dict_in_child_process: {type(e)}\n{traceback.print_exc()}", file=sys.stderr)
            os._exit(1)
        os._exit(0)
    elif pid > 0: # I am the parent process
        os.close(write_fd)  # the parent does not write to the pipe, it reads from it
        logging.debug(f"[query_controller]: child process pid={pid}")
        read_fo = os.fdopen(read_fd, "r")
    else:
        logging.error("[query_controller]: fork() unsuccessful")
        assert False, "********** fork() unsuccessful; something went very wrong *********"
    return read_fo