예제 #1
0
def enqueue_job(iszmq, jobpath, destip, destport):
    # Bind to some other port. Not to the main 33310.
    if iszmq:
        messenger_type = messenger.ZMQMessenger.TYPE_CLIENT
        m = messenger.ZMQMessenger(port=0, type=messenger_type)
    else:
        m = messenger.UDPMessenger(port=0)
    m.start()
    my_hostname = socket.gethostname()
    m.register_destination(my_hostname,
                           (destip, destport))
    # This file contains at most 3 methods: split, combine, processor and
    # at most 1 variables: input_data
    jobdir, jobfile = os.path.split(jobpath)
    job_module_name = jobfile[:-3]
    pkg = __import__(jobdir, globals(), locals(), [job_module_name], 0)
    jobcode = getattr(pkg, job_module_name)
    try:
        combiner = Combiner()
        combiner.set_combine_method(jobcode.combine)
    except:
        combiner = None

    try:
        splitter = Splitter()
        splitter.set_split_method(jobcode.split)
    except:
        splitter = None

    job = Job(processor=jobcode.processor,
              input_data=jobcode.input_data,
              splitter=splitter,
              combiner=combiner)
    try:
        job.input_data = jobcode.input_data
    except:
        pass

    if iszmq:
        m.connect((destip, destport))
        m.send_job(job, (destip, destport))
    else:
        tracker = m.send_job(job, (destip, dest_port), track=True)
        while tracker.state != message.MessageTracker.MSG_ACKED:
            time.sleep(2.0)

    return