2014-11-03 19 views
1

使用python脚本,我依次调用不同的函数(可以说func_a,func_b,func_c),它处理给定的一组输入数据。使用python进行线程间通信:使用单独的python线程绘制内存消耗

执行大约需要30分钟。

在这30分钟内,我想跟踪和绘制我的程序的内存消耗。

我认为这是在一个单独的线程(例如my_tracking_thread)中执行的,它检查当前的内存使用情况。

E.g. like this:

import psutil 
process = psutil.Process(os.getpid()) 
mem = process.get_memory_info()[0]/float(2 ** 20) 

绘制与matplotlib my_tracking_thread的所收集的数据,我想包括作为附加信息的时间标记,在该不同的功能启动(func_a @ 4:14,func_b @ 6 :23,func_c @ 25:48)。

因此问题: 如何让my_tracking_thread通知func_ {a | b | c}已启动?

任何帮助表示赞赏。

回答

1

很难看出你如何从其他线程做到这一点。你需要吗?我建议将它们包装在装饰器中,它们记录它们开始和结束的时间,然后当您在开始/结束信息中合并内存消耗数据时生成绘图。

import collections 
import functools 
import time 
LogEvent = collections.namedtuple('LogEvent', 'function event timestamp') 

events = [] 

def log_start_finish(func): 
    @functools.wraps(func) 
    def wrapper(*args, **kwargs): 
     events.append(LogEvent(func.__name__, 'start', time.time()) 
     result = func(*args, **kwargs) 
     events.append(LogEvent(func.__name__, 'finish', time.time()) 
     return result 
    return wrapper 

@log_start_finish 
def func_a(...): 
    .... 

@log_start_finish 
def func_b(...): 
    .... 

@log_start_finish 
def func_c(...): 
    ....