Example #1
0
def get_update_time_interval():
    #打开xml文档
    dom = xml.dom.minidom.parse(get_current_dir() + '/properties.xml')
    #得到文档元素对象
    root = dom.documentElement
    update_time_interval = root.getElementsByTagName('update_time_interval')
    #获得更新时间间隔
    update_time = int(update_time_interval[0].firstChild.data)
    return dict({'update_time': update_time})
Example #2
0
def get_username_and_password():
    #打开xml文档
    dom = xml.dom.minidom.parse(get_current_dir() + '/properties.xml')
    #得到文档元素对象
    root = dom.documentElement
    mysql_uesrname = root.getElementsByTagName('mysql_uesrname')
    mysql_password = root.getElementsByTagName('mysql_password')
    #获得用户名与密码
    user = str(mysql_uesrname[0].firstChild.data)
    passwd = str(mysql_password[0].firstChild.data)
    if passwd == 'null': passwd = ''
    return dict({'user': user, 'passwd': passwd})
Example #3
0
            print filepath + " removed!"
        #如果是文件夹则整个文件夹删除
        elif os.path.isdir(filepath):
            shutil.rmtree(filepath, True)
            print "dir " + filepath + " removed!"


#清空mongodb数据库
def clearmongodb():
    client = Client()
    db = client.traffic_project
    #清空速度
    db.speed.remove({})
    #清空状态
    db.state.remove({})
    #清空流量
    db.maccount.remove({})
    #清空清空拥堵指数
    db.congestion_index.remove({})
    #清空其他指标数据
    db.traffic_state.remove({})


#主入口
#清楚各路段的旧记录
seglist = getsegmentlist()
for seg in seglist:
    filename = get_current_dir() + "/data/wifiresult/" + str(seg['segmentid'])
    removedir(filename)
    clearmongodb()
Example #4
0
def fatherthread():
    #测试数据开始时间
    test_begin_time = 1477843200
    #测试数据总时长
    test_time_long = 24
    #模拟测试数据单前时间
    delta = int(time.time()) - test_begin_time
    current_time = int(time.time()) - delta
    #当前日期,格式yyyymmdd
    date = timestamp2date(current_time)
    #探针数据目录
    sourcefolder = get_current_dir() + "/WiFiData/"
    #数据处理结果存放目录
    resultfolder = get_current_dir() + "/data/wifiresult/"

    print "程序启动日期:" + date
    print "程序启动时间:" + timestamp2str(current_time)

    #循环执行计算任务,每5分钟计算一次,知道指定时间停止
    while current_time <= (test_begin_time + test_time_long * 3600):
        print "当前时间:" + timestamp2str(current_time)

        timestr = time.strftime('%Y%m%d%H%M%S', time.localtime(current_time))

        speed_d = {'time': timestr}
        mac_d = {'time': timestr}
        state_d = {'time': timestr}
        congestion_index_d = {'time': timestr}
        #获取历史速度数据(不含当前)
        his_df = gethistory(current_time, resultfolder)

        #耗时计算的起始时刻
        start_time = time.time()
        #任务分块,确定各个子线程的输入参数
        inputs = []
        #从数据库获得路段列表
        segmentlist = getsegmentlist()

        #任务切割与分配
        block_q = separation(len(segmentlist), 90)
        while not block_q.empty():
            block = block_q.get()
            start = block.get('start')
            end = block.get('end')
            inputs.append({
                'seglist': segmentlist[start:end + 1],
                'date': date,
                'current_time': current_time,
                'sourcefolder': sourcefolder,
                'resultfolder': resultfolder,
                'history': his_df
            })

        #使用multiprocessing并行进程池来并行处理任务,充分利用cup资源

        #确定进程池大小
        pool_size = multiprocessing.cpu_count() * 2
        print "进程数" + str(pool_size)
        # 初始化线程池
        pool = multiprocessing.Pool(processes=pool_size,
                                    initializer=start_process,
                                    maxtasksperchild=2)
        # 获得各子线程的返回结果,存在列表final_result里
        final_result = pool.map(
            sonthread,
            inputs,
        )
        #关闭进程池,阻止其他进程进入,等待各个任务完成
        pool.close()
        #将进程池join到父线程里
        pool.join()
        pool.terminate()

        #父线程在所有子线程结束后,把结果取出来整合
        for list in final_result:
            mac_d = dict(mac_d, **list[0])
            speed_d = dict(speed_d, **list[1])
            state_d = dict(state_d, **list[2])
            congestion_index_d = dict(congestion_index_d, **list[3])

        # mac_d=sorted(mac_d.iteritems(),key=lambda d:d[0])
        # speed_d=sorted(speed_d.iteritems(),key=lambda d:d[0])
        # state_d=sorted(state_d.iteritems(),key=lambda d:d[0])
        # congestion_index_d=sorted(congestion_index_d.iteritems(),key=lambda d:d[0])

        #插入速度,流量,拥堵状态数据
        print speed_d
        print mac_d
        print state_d
        print congestion_index_d

        #车流量
        insert_maccount(mac_d)
        #速度
        insert_speed(speed_d)
        #状态
        insert_state(state_d)
        #拥堵指数
        insert_congestion_index(congestion_index_d)

        #交通指数
        traffic_index = get_traffic_index(timestr)
        #路网拥堵比率
        congrestion_rate = get_congrestion_rate(timestr)

        traffic_state_dict = {
            'time': timestr,
            'traffic_index': traffic_index,
            'congrestion_rate': congrestion_rate
        }

        #区域交通指数
        area_name = getAreas()
        for area in area_name:
            area_dict = {area: get_traffic_index_of_area(timestr, area)}
            traffic_state_dict = dict(traffic_state_dict, **area_dict)

        print traffic_state_dict
        #交通状态指标插入数据库
        insert_traffic_state(traffic_state_dict)

        #标记耗时
        time_cost = time.time() - start_time
        print "用时" + str(time_cost)
        #线程休眠,
        # 休眠间隔与更新周期相关
        sleeptime = get_update_time_interval()['update_time'] - time_cost
        if sleeptime < 0:
            sleeptime = 0
        time.sleep(sleeptime)
        #更新当前时间
        current_time = current_time + get_update_time_interval()['update_time']
def fatherthread():

    current_time = int(time.time())
    #current_time=1492297200
    #当前日期,格式yyyymmdd
    date = timestamp2date(current_time)
    #探针数据目录
    sourcefolder = "/home/wicloud/ywbrtdata/"
    #sourcefolder="/mnt/home/zhangyunlong/ywbrt/ywbrtdata/"
    #数据处理结果存放目录
    resultfolder = get_current_dir() + "/data/wifiresult/"

    print "程序启动日期:" + date
    print "程序启动时间:" + timestamp2str(current_time)

    #循环执行计算任务,每5分钟计算一次
    #更新周期可以在配置文件中设定
    #该程序是用于真正的实时数据处理的,作为一个服务一直执行
    while True:
        print "当前时间:" + timestamp2str(current_time)

        timestr = time.strftime('%Y%m%d%H%M%S', time.localtime(current_time))
        speed_d = {'time': timestr}
        mac_d = {'time': timestr}
        state_d = {'time': timestr}
        congestion_index_d = {'time': timestr}
        #获取历史速度数据(不含当前)
        his_df = gethistory(current_time, resultfolder)

        #耗时计算的起始时刻
        start_time = time.time()
        #任务分块,确定各个子线程的输入参数
        inputs = []
        #从数据库获得路段列表
        segmentlist = getsegmentlist()

        #任务切割与分配
        block_q = separation(len(segmentlist), 90)
        while not block_q.empty():
            block = block_q.get()
            start = block.get('start')
            end = block.get('end')
            inputs.append({
                'seglist': segmentlist[start:end + 1],
                'date': date,
                'current_time': current_time,
                'sourcefolder': sourcefolder,
                'resultfolder': resultfolder,
                'history': his_df
            })

        #使用multiprocessing并行进程池来并行处理任务,充分利用cup资源

        #确定进程池大小
        pool_size = multiprocessing.cpu_count() * 2
        print "进程数" + str(pool_size)
        # 初始化线程池
        pool = multiprocessing.Pool(processes=pool_size,
                                    initializer=start_process,
                                    maxtasksperchild=2)
        # 获得各子线程的返回结果,存在列表final_result里
        final_result = pool.map(
            sonthread,
            inputs,
        )
        #关闭进程池,阻止其他进程进入,等待各个任务完成
        pool.close()
        #将进程池join到父线程里
        pool.join()
        pool.terminate()

        #父线程在所有子线程结束后,把结果取出来整合
        for list in final_result:
            mac_d = dict(mac_d, **list[0])
            speed_d = dict(speed_d, **list[1])
            state_d = dict(state_d, **list[2])
            congestion_index_d = dict(congestion_index_d, **list[3])

        #插入速度,流量,拥堵状态数据
        print speed_d
        print mac_d
        print state_d
        print congestion_index_d

        insert_maccount(mac_d)
        insert_speed(speed_d)
        insert_state(state_d)
        insert_congestion_index(congestion_index_d)

        #计算交通指数和全网拥堵比率
        traffic_index = get_traffic_index(timestr)
        congrestion_rate = get_congrestion_rate(timestr)
        traffic_state_dict = {
            'time': timestr,
            'traffic_index': traffic_index,
            'congrestion_rate': congrestion_rate
        }
        #获取本路网涉及到的城市行政区划列表
        area_name = getAreas()

        for area in area_name:
            area_dict = {area: get_traffic_index_of_area(timestr, area)}
            traffic_state_dict = dict(traffic_state_dict, **area_dict)

        print traffic_state_dict
        #插入交通状况记录
        insert_traffic_state(traffic_state_dict)
        #每轮运算耗时与父线程休眠时间控制
        time_cost = time.time() - start_time
        print "用时" + str(time_cost)
        sleeptime = get_update_time_interval()['update_time'] - time_cost
        if sleeptime < 0:
            sleeptime = 0
        time.sleep(sleeptime)
        current_time = current_time + get_update_time_interval()['update_time']
Example #6
0
#coding=utf-8
import os
from mysql_utils import getsegmentlist
from getpath import get_current_dir

#从数据库读所有需要计算的路段信息
seglist = getsegmentlist()
#轮询路段列表并创建结果输出目录
for seg in seglist:
    print seg
    if not os.path.exists(get_current_dir() + '/data/wifiresult/' +
                          str(seg['segmentid'])):
        os.makedirs(get_current_dir() + '/data/wifiresult/' +
                    str(seg['segmentid']))