Пример #1
0
def GISops_1p(inSpace, inGdb, currentIter, fcTAZ, fcDet):
    '''
    Carry out GIS operations

    Inputs
    -----
    inSpace     : str
                  working directory
    inGdb       : str
                  Name of geodatabase
    currentIter : int
                  Current iteration
    fcTAZ       : str
                  Name of TAZ featureclass
    fcDet       : str
                  Name of detector featureclass
    
    Outputs
    -------
    Cost matrices: TT, TD, DT
    '''
    try:
    #    print "Starting GIS process", mp.current_process().name, "on", time.strftime("%d/%m/%Y - %H:%M:%S")
        # SETUP JOBS
        period = "P"
        inSpeed = "detspd" + str(currentIter - 1) + "-"+period+".csv"
        Gdb = inGdb[:-4] + "-" + period + inGdb[-4:]
        Gdb_P = Gdb
        j1_p = mp.Process(target=ModJoinSpeed.joinSpeed, args=(inSpace, Gdb, inSpeed))
        j2_p = mp.Process(target=ModBuild.build, args=(inSpace, Gdb))
        j3_p = mp.Process(target=ModSolveMP.solve_2p, args=(inSpace, Gdb, fcTAZ, fcDet, period))
        
#        period = "OP"
#        inSpeed = "detspd" + str(currentIter - 1) + "-"+period+".csv"
#        Gdb = inGdb[:-4] + "-" + period + inGdb[-4:]
#        Gdb_OP = Gdb
#        j1_op = mp.Process(target=ModJoinSpeed.joinSpeed, args=(inSpace, Gdb, inSpeed))
#        j2_op = mp.Process(target=ModBuild.build, args=(inSpace, Gdb))
#        j3_op = mp.Process(target=ModSolveMP.solve_2p, args=(inSpace, Gdb, fcTAZ, fcDet, period))
    
    
        # Run Jobs.  Try to keep jobs in sync    
        # HINT: Give some slack time between processes to make sure they won't try to access same files.
        # HINT: Run j1 together, wait for both job to finish with join, then run next job.
        # Job 1
        j1_p.start()
#        time.sleep(10)
#        j1_op.start()
        j1_p.join()
#        j1_op.join()
        # Job 2
        j2_p.start()
#        time.sleep(10)
#        j2_op.start()
        j2_p.join()
#        j2_op.join()
        # Job 3
        setup_3workers(inSpace, Gdb_P)
#        setup_3workers(inSpace, Gdb_OP)
        j3_p.start()
        time.sleep(30)
#        j3_op.start()
        j3_p.join()
#        j3_op.join()
    
        del_3workers(inSpace, Gdb_P)
#        del_3workers(inSpace, Gdb_OP)
        
        # Convert DBF to CSV
        dbf2CSV(inSpace+"CSV/TTP.dbf")
        dbf2CSV(inSpace+"CSV/TDP.dbf")
        dbf2CSV(inSpace+"CSV/DTP.dbf")
#        dbf2CSV(inSpace+"CSV/TTOP.dbf")
#        dbf2CSV(inSpace+"CSV/TDOP.dbf")
#        dbf2CSV(inSpace+"CSV/DTOP.dbf")
        return 1
    except Exception as e:
        # If an error occurred, print line number and error message
        import sys
        tb = sys.exc_info()[2]
        print "An error occurred in ModGIS.GISops_1p line %i" % tb.tb_lineno
        print str(e)
Пример #2
0
def GISops(inSpace, inGdb, currentIter, fcTAZ, fcDet):
    try:
        #    print "Starting GIS process", mp.current_process().name, "on", time.strftime("%d/%m/%Y - %H:%M:%S")
        # SETUP JOBS
        period = "P"
        inSpeed = "detspd" + str(currentIter - 1) + "-" + period + ".csv"
        Gdb = inGdb[:-4] + "-" + period + inGdb[-4:]
        Gdb_P = Gdb
        j1_p = mp.Process(target=ModJoinSpeed.joinSpeed,
                          args=(inSpace, Gdb, inSpeed))
        j2_p = mp.Process(target=ModBuild.build, args=(inSpace, Gdb))
        j3_p = mp.Process(target=ModSolveMP.solve_2p,
                          args=(inSpace, Gdb, fcTAZ, fcDet, period))

        period = "OP"
        inSpeed = "detspd" + str(currentIter - 1) + "-" + period + ".csv"
        Gdb = inGdb[:-4] + "-" + period + inGdb[-4:]
        Gdb_OP = Gdb
        j1_op = mp.Process(target=ModJoinSpeed.joinSpeed,
                           args=(inSpace, Gdb, inSpeed))
        j2_op = mp.Process(target=ModBuild.build, args=(inSpace, Gdb))
        j3_op = mp.Process(target=ModSolveMP.solve_2p,
                           args=(inSpace, Gdb, fcTAZ, fcDet, period))

        # Run Jobs.  Try to keep jobs in sync
        # HINT: Give some slack time between processes to make sure they won't try to access same files.
        # HINT: Run j1 together, wait for both job to finish with join, then run next job.
        # Job 1
        j1_p.start()
        time.sleep(10)
        j1_op.start()
        j1_p.join()
        j1_op.join()
        # Job 2
        j2_p.start()
        time.sleep(10)
        j2_op.start()
        j2_p.join()
        j2_op.join()
        # Job 3
        setup_3workers(inSpace, Gdb_P)
        setup_3workers(inSpace, Gdb_OP)
        j3_p.start()
        time.sleep(30)
        j3_op.start()
        j3_p.join()
        j3_op.join()

        del_3workers(inSpace, Gdb_P)
        del_3workers(inSpace, Gdb_OP)

        # Convert DBF to CSV
        dbf2CSV(inSpace + "/CSV/TTP.dbf")
        dbf2CSV(inSpace + "/CSV/TTOP.dbf")
        dbf2CSV(inSpace + "/CSV/TDP.dbf")
        dbf2CSV(inSpace + "/CSV/TDOP.dbf")
        dbf2CSV(inSpace + "/CSV/DTP.dbf")
        dbf2CSV(inSpace + "/CSV/DTOP.dbf")
    except Exception as e:
        # If an error occurred, print line number and error message
        import sys
        tb = sys.exc_info()[2]
        print "An error occurred in GISops line %i" % tb.tb_lineno
        print str(e)