1

我有一个脚本可以做很多事情,我想生成一个线程来监视正在发生的事情的 cpu 和内存使用情况。

监控部分是:

import psutil
import time
import datetime

def MonitorProcess():
    procname = "firefox"

    while True:
            output_sys = open("/tmp/sysstats_counter.log", 'a')

            for proc in psutil.process_iter():
                    if proc.name == procname:
                            p = proc

            p.cmdline

            proc_rss, proc_vms =  p.get_memory_info()
            proc_cpu =  p.get_cpu_percent(1)

            scol1 = str(proc_rss / 1024)
            scol2 = str(proc_cpu)

            now = str(datetime.datetime.now())

            output_sys.write(scol1)
            output_sys.write(", ")
            output_sys.write(scol2)
            output_sys.write(", ")
            output_sys.write(now)
            output_sys.write("\n")

            output_sys.close( )

            time.sleep(1)

我确信有更好的方法来进行监控,但我现在不在乎。

主脚本调用:

RunTasks() # which runs the forground tasks 
MonitorProcess() # Which is intended to monitor the tasks CPU and Memory Usage over time

我想同时运行这两个功能。为此,我假设我必须使用线程库。那么方法是否可以执行以下操作:

thread = threading.Thread(target=MonitorProcess())
thread.start

还是我走远了?

另外,当 RunTasks() 函数完成时,如何让 MonitorProcess() 自动停止?我假设我可以测试该进程是否存在,如果它没有杀死该函数???

4

1 回答 1

2

听起来你想要一个守护线程。从文档

可以将线程标记为“守护线程”。这个标志的意义在于,当只剩下守护线程时,整个 Python 程序就退出了。初始值继承自创建线程。可以通过 daemon 属性设置标志。

在您的代码中:

thread = threading.Thread(target=MonitorProcess)
thread.daemon = True
thread.start()

当 main 退出时,程序将退出,即使守护线程仍然处于活动状态。设置并启动监视线程后,您将需要运行前台任务。

于 2012-11-14T03:24:01.283 回答