金字塔中所有请求共享的全局变量

2024-09-30 16:23:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Pylons中有这段代码,用于计算运行webapp的Linux系统的网络使用率。基本上,要计算网络利用率,我们需要读取文件/proc/net/dev两次,这将给出传输的数据量,并将减去的值除以两次读取之间所用的时间。在

我不想定期做这个计算。有一个JS代码定期获取这些数据。传输速率是每个时间单位两个请求之间传输的平均字节数。在Pylons中,我使用pylons.app_globals来存储下一次请求时从下一个读数中减去的读数。但是显然金字塔中没有app_globals,我不确定使用线程局部变量是否是正确的操作过程。还有,尽管请求.注册表.设置显然是在所有请求之间共享的,我不愿意将我的数据存储在那里,因为名称意味着它应该只存储设置。在

def netUsage():
    netusage = {'rx':0, 'tx':0, 'time': time.time()}
    rtn = {}
    net_file = open('/proc/net/dev')
    for line in net_file.readlines()[2:]:
        tmp = map(string.atof, re.compile('\d+').findall(line[line.find(':'):]))
        if line[:line.find(':')].strip() == "lo":
            continue
        netusage['rx'] += tmp[0]
        netusage['tx'] += tmp[8]
    net_file.close()
    rx = netusage['rx'] - app_globals.prevNetusage['rx'] if app_globals.prevNetusage['rx'] else 0
    tx = netusage['tx'] - app_globals.prevNetusage['tx'] if app_globals.prevNetusage'tx'] else 0
    elapsed = netusage['time'] - app_globals.prevNetusage['time']
    rtn['rx'] = humanReadable(rx / elapsed)
    rtn['tx'] = humanReadable(tx / elapsed)

    app_globals.prevNetusage = netusage
    return rtn

@memorize(duration = 3)
def getSysStat():
    memTotal, memUsed = getMemUsage()
    net = netUsage()
    loadavg = getLoadAverage()
    return {'cpu': getCPUUsage(),
            'mem': int((memUsed / memTotal) * 100),
            'load1': loadavg[0],
            'load5': loadavg[1],
            'load15': loadavg[2],
            'procNum': loadavg[3],
            'lastProc': loadavg[4],
            'rx': net['rx'],
            'tx': net['tx']
            }

Tags: appnetiftimelinerxtmpfile