<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def hybrid_coroutine_worker(selector, workers):
 """Runs a set of workers, all of them in the main thread. This runner is here for testing purposes. :param selector: A function returning a worker key, given a job. :type selector: function :param workers: A dict of workers. :type workers: dict """

    jobs = Queue()

    worker_source = {}
    worker_sink = {}

    for k, w in workers.items():
        worker_source[k], worker_sink[k] = w.setup()

    def get_result():
        source = jobs.source()

        for msg in source:
            key, job = msg
            worker = selector(job)
            if worker is None:
                yield run_job(key, job)
            else:
                # send the worker a job and wait for it to return
                worker_sink[worker].send(msg)
                result = next(worker_source[worker])
                yield result

    return Connection(get_result, jobs.sink)