欢迎访问宙启技术站
智能推送

使用Python编写任务监控程序

发布时间:2023-12-18 11:21:29

编写一个任务监控程序是实现任务管理和监控的一个重要工具。在Python中,可以使用多个模块来实现任务监控功能,如psutil、datetime和time模块。下面是一个简单的任务监控程序的示例,包括任务列表展示和监控任务运行时长的功能。

import psutil
import datetime
import time

class Task:
    def __init__(self, pid, name, start_time):
        self.pid = pid
        self.name = name
        self.start_time = start_time

def list_tasks():
    tasks = []
    for proc in psutil.process_iter(['pid', 'name', 'create_time']):
        try:
            if proc.info['name'] == 'python':  # 过滤只显示Python进程,可根据需求修改
                pid = proc.info['pid']
                name = proc.info['name']
                start_time = datetime.datetime.fromtimestamp(proc.info['create_time'])
                tasks.append(Task(pid, name, start_time))
        except (psutil.AccessDenied, psutil.NoSuchProcess):
            pass
    return tasks

def monitor_task(task_id):
    for task in list_tasks():
        if task.pid == task_id:
            while True:
                try:
                    proc = psutil.Process(task.pid)
                    elapsed_time = datetime.datetime.now() - task.start_time
                    print(f"任务 {task.name}(PID: {task.pid}) 已经运行了 {elapsed_time}")
                    time.sleep(60)  # 每隔60秒监控一次,可根据需求修改
                except psutil.NoSuchProcess:
                    print(f"任务 {task.name}(PID: {task.pid}) 已经停止运行")
                    break

# 使用示例
if __name__ == "__main__":
    print("任务列表:")
    tasks = list_tasks()
    for task in tasks:
        print(f"任务名:{task.name},PID:{task.pid}")

    task_id = int(input("请输入要监控的任务的PID:"))
    monitor_task(task_id)

上述示例代码包含了两个函数:list_tasks和monitor_task。

- list_tasks函数通过使用psutil模块获取当前运行的所有进程,并根据需求进行过滤,获取符合条件的任务进程(如示例中只获取Python进程)。然后将进程的相关信息构造成Task对象并返回任务列表。

- monitor_task函数接收一个PID作为参数,并根据该PID找到对应的任务,然后使用psutil模块获取该任务的进程信息。接着通过计算当前时间与任务开始时间的时间差,实时显示任务的运行时长。同时,通过使用time模块实现每隔一段时间(如示例中的60秒)更新一次任务的运行时长。当任务进程不存在时,停止监控。

在使用示例中,首先通过调用list_tasks函数获取到当前的任务列表,并展示出来。然后输入要监控的任务的PID,调用monitor_task函数进行监控。

总结:上述示例给出了一个简单的任务监控程序,通过使用psutil、datetime和time等模块,可以实现任务列表的展示和监控任务运行时长的功能。可以根据实际需求,对示例代码进行修改和扩展,以满足更多的任务监控需求。