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

2024-10-02 12:26:42 发布

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

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

行刑大约需要30分钟

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

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

E.g. like this:

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

用matplotlib绘制我的_tracking_线程的收集数据时,我想将不同函数开始的时间戳作为附加信息(功能a@4:14,功能b@6:23,功能c@25:48)。在

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

感谢任何帮助。在


Tags: 数据函数内存程序功能脚本绘制情况
1条回答
网友
1楼 · 发布于 2024-10-02 12:26:42

很难从另一条线看出你是怎么做到的。你需要吗?我建议将它们包装在decorator中,记录它们的开始和结束时间,然后在生成绘图时,将内存消耗数据合并到start/finish信息中。在

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

相关问题 更多 >

    热门问题