与python的线程间通信:使用单独的python线程绘制内存消耗

与python的线程间通信:使用单独的python线程绘制内存消耗,python,multithreading,Python,Multithreading,使用python脚本,我按顺序调用不同的函数(比如func_a、func_b、func_c),这些函数处理给定的输入数据集 执行大约需要30分钟 在这30分钟内,我想跟踪并绘制程序的内存消耗 我考虑在一个单独的线程(例如my_tracking_线程)中执行此操作,该线程检查当前内存使用情况 使用matplotlib绘制我的_tracking_线程的收集数据,我希望将不同函数启动时的时间戳作为附加信息(func_a@4:14,func_b@6:23,func_c@25:48) 因此,问题是: 我

使用python脚本,我按顺序调用不同的函数(比如func_a、func_b、func_c),这些函数处理给定的输入数据集

执行大约需要30分钟

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

我考虑在一个单独的线程(例如my_tracking_线程)中执行此操作,该线程检查当前内存使用情况

使用matplotlib绘制我的_tracking_线程的收集数据,我希望将不同函数启动时的时间戳作为附加信息(func_a@4:14,func_b@6:23,func_c@25:48)

因此,问题是: 我如何让我的跟踪线程通知func{a | b | c}已经启动


感谢您的帮助。

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

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(...):
    ....
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(...):
    ....