Ejemplo n.º 1
0
def main():

    # set parameters

    process_options()

    # put jobs in queue

    jobs = calculate_jobs()
    job_queue = Queue(0)
    result_queue = Queue(0)

    for line in jobs:
        for (c,g) in line:
            job_queue.put((c,g))

    # hack the queue to become a stack --
    # this is important when some thread
    # failed and re-put a job. It we still
    # use FIFO, the job will be put
    # into the end of the queue, and the graph
    # will only be updated in the end
 
    if MULTI_PROCESS:
        class fake_buffer(object):
            def __init__(self, buf):
                self.buf = buf
            def append(self, obj):
                return self.buf.appendleft(obj)
            def clear(self):
                return self.buf.clear()
        job_queue._buffer = fake_buffer(job_queue._buffer)
    else:
        job_queue._put = job_queue.queue.appendleft


    # fire telnet workers

    if telnet_workers:
        nr_telnet_worker = len(telnet_workers)
        username = getpass.getuser()
        password = getpass.getpass()
        for host in telnet_workers:
            TelnetWorker(host,job_queue,result_queue,
                     host,username,password).start()

    # fire ssh workers

    if ssh_workers:
        for host in ssh_workers:
            SSHWorker(host,job_queue,result_queue,host).start()

    # fire local workers

    for i in range(nr_local_worker):
        LocalWorker('local',job_queue,result_queue).start()

    # gather results

    done_jobs = {}


    result_file = open(out_filename, 'w')


    db = []
    best_rate = -1
    best_c1,best_g1 = None,None

    for line in jobs:
        for (c,g) in line:
            while (c, g) not in done_jobs:
                (worker,c1,g1,rate) = result_queue.get()
                done_jobs[(c1,g1)] = rate
                result_file.write('{0} {1} {2}\n'.format(c1,g1,rate))
                result_file.flush()
                if (rate > best_rate) or (rate==best_rate and g1==best_g1 and c1<best_c1):
                    best_rate = rate
                    best_c1,best_g1=c1,g1
                    best_c = 2.0**c1
                    best_g = 2.0**g1
                print("[{0}] {1} {2} {3} (best c={4}, g={5}, rate={6})".format \
		    (worker,c1,g1,rate, best_c, best_g, best_rate))
            db.append((c,g,done_jobs[(c,g)]))
        redraw(db,[best_c1, best_g1, best_rate])
        redraw(db,[best_c1, best_g1, best_rate],True)

    job_queue.put((WorkerStopToken,None))
    print("{0} {1} {2}".format(best_c, best_g, best_rate))
Ejemplo n.º 2
0
def main():

    # set parameters

    process_options()

    # put jobs in queue

    jobs = calculate_jobs()
    job_queue = Queue(0)
    result_queue = Queue(0)

    for line in jobs:
        for (c, g) in line:
            job_queue.put((c, g))

    # hack the queue to become a stack --
    # this is important when some thread
    # failed and re-put a job. It we still
    # use FIFO, the job will be put
    # into the end of the queue, and the graph
    # will only be updated in the end

    if MULTI_PROCESS:

        class fake_buffer(object):
            def __init__(self, buf):
                self.buf = buf

            def append(self, obj):
                return self.buf.appendleft(obj)

            def clear(self):
                return self.buf.clear()

        job_queue._buffer = fake_buffer(job_queue._buffer)
    else:
        job_queue._put = job_queue.queue.appendleft

    # fire telnet workers

    if telnet_workers:
        nr_telnet_worker = len(telnet_workers)
        username = getpass.getuser()
        password = getpass.getpass()
        for host in telnet_workers:
            TelnetWorker(host, job_queue, result_queue, host, username,
                         password).start()

    # fire ssh workers

    if ssh_workers:
        for host in ssh_workers:
            SSHWorker(host, job_queue, result_queue, host).start()

    # fire local workers

    for i in range(nr_local_worker):
        LocalWorker('local', job_queue, result_queue).start()

    # gather results

    done_jobs = {}

    result_file = open(out_filename, 'w')

    db = []
    best_rate = -1
    best_c1, best_g1 = None, None

    for line in jobs:
        for (c, g) in line:
            while (c, g) not in done_jobs:
                (worker, c1, g1, rate) = result_queue.get()
                done_jobs[(c1, g1)] = rate
                result_file.write('{0} {1} {2}\n'.format(c1, g1, rate))
                result_file.flush()
                if (rate > best_rate) or (rate == best_rate and g1 == best_g1
                                          and c1 < best_c1):
                    best_rate = rate
                    best_c1, best_g1 = c1, g1
                    best_c = 2.0**c1
                    best_g = 2.0**g1
                print("[{0}] {1} {2} {3} (best c={4}, g={5}, rate={6})".format \
      (worker,c1,g1,rate, best_c, best_g, best_rate))
            db.append((c, g, done_jobs[(c, g)]))
        redraw(db, [best_c1, best_g1, best_rate])
        redraw(db, [best_c1, best_g1, best_rate], True)

    job_queue.put((WorkerStopToken, None))
    print("{0} {1} {2}".format(best_c, best_g, best_rate))