使用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等模块,可以实现任务列表的展示和监控任务运行时长的功能。可以根据实际需求,对示例代码进行修改和扩展,以满足更多的任务监控需求。
