Python获取磁盘使用信息,python获取GPU信息,python根据进程号获取进程信息,pynvml 获取GPU信息,psutil 获取进程信息,系统信息等

一、工具:psutil模块

psutil是一个跨平台模块,试用相应方法可以直接获取计算机CPU,内存,磁盘,网络等资源使用情况;可以使用我们学习知识与这模块用来做系统监控,性能分析;如果大家熟悉Linux系统,它能够实现ps、top、lsof、netstat、df等命令功能。

1.1、psutil安装:

psutil是第三方模块,使用时候需要要安装,相关说明链接地址:
https://pypi.org/project/psutil/ ;

pip安装方式:

pip install psutil

验证:

#导入模块import psutil#查看版本信息psutil.version_info

输出信息:

(5, 4, 8)

这里说明安装成功(版本可能会不同,但是不影响使用);

1.2 获取CPU信息

使用下面这些方法可以获取计算机CPU数量,CPU使用率:

方法说明
cpu_count(logical=True)获取CPU数量
cpu_times(percpu=False)获取不同状态下CPU运行时间
cpu_percent(interval=None, percpu=False)获取CPU使用率
cpu_times_percent(interval=None, percpu=False)获取CPU各状态占百分比

两个个知识点需要简单介绍下,这里只需要了解即可:
1)CPU数量:CPU分为物理CPU与逻辑CPU,之间关系如下:

1>物理CPU:计算机实际CPU数量,一般个人电脑1个;
2>核数:现在CPU基本都是多核,比如双核,4核;
3>逻辑CPU:物理CPU*核数*超线程数

2)CPU运行状态分为用户态与内核态;

1>用户态是指程序在内存运行,不直接访问硬件资源;
2>用户需要访问硬件资源,需要系统调用,这部分有操作系统(内核)完成,称为内核态,例如:读写文件,网络数据收发,键盘事件获取等;

下面我们来实际操作下(windows环境):

import psutil#获取CPU不同状态运行时间print(psutil.cpu_times())print('CPU 执行用户进程时间:', psutil.cpu_times().user)print('CPU 执行系统调用时间:', psutil.cpu_times().system)print('CPU 空闲等待 时间:', psutil.cpu_times().idle)print('CPU 响应中断 时间:', psutil.cpu_times().interrupt)#CPU使用率:不加参数为上一次调用到现在使用率print('CPU 使用率:',psutil.cpu_percent())#3秒内CPU使用率print('CPU 3秒内使用率:',psutil.cpu_percent(interval=3))#3秒内每个CPU使用率print('每个逻辑CPU使用率:',psutil.cpu_percent( percpu = True))#CPU各个状态使用情况(百分比)print('CPU 各个状态使用情况:',psutil.cpu_times_percent())#每个CPU各个状态使用情况print('各个CPU 各个状态使用情况:')cpuinfos = psutil.cpu_times_percent(percpu = True)for info in cpuinfos:print(info)

运行结果如下:

scputimes(user=85326.484375, system=56630.8125, idle=2245745.0625, interrupt=5347.296875, dpc=1395.984375)CPU 执行用户进程时间: 85326.484375CPU 执行系统调用时间: 56630.8125CPU 空闲等待 时间: 2245745.0625CPU 响应中断 时间: 5347.296875CPU 使用率: 3.4CPU 3秒内使用率: 2.5每个逻辑CPU使用率: [7.0, 2.1, 4.5, 2.5, 2.7, 2.1, 2.1, 2.7]CPU 各个状态使用情况: scputimes(user=1.4, system=1.5, idle=96.8, interrupt=0.3, dpc=0.0)各个CPU 各个状态使用情况:scputimes(user=1.8, system=3.1, idle=93.0, interrupt=1.9, dpc=0.2)scputimes(user=0.4, system=1.6, idle=97.9, interrupt=0.1, dpc=0.0)scputimes(user=1.6, system=2.8, idle=95.5, interrupt=0.1, dpc=0.0)scputimes(user=1.0, system=1.4, idle=97.5, interrupt=0.1, dpc=0.0)scputimes(user=2.4, system=0.2, idle=97.3, interrupt=0.0, dpc=0.0)scputimes(user=1.1, system=1.0, idle=97.9, interrupt=0.0, dpc=0.0)scputimes(user=0.8, system=1.2, idle=97.9, interrupt=0.0, dpc=0.0)scputimes(user=1.8, system=0.7, idle=97.3, interrupt=0.1, dpc=0.0)

对于不同系统,获取内容稍微有所不同,大家可以在linux尝试下操作。

1.3 获取系统内存信息

程序在内存中运行,实际工作中我们需要对内存进行监控,如果内存使用接近100%,可能存在内存泄漏等问题;我们主要关注内存的total(内存总数),used(已使用),free(未使用)情况,相关方法如下:

方法说明
psutil.virtual_memory获取内存使用情况,不同系统返回值不同
psutil.swap_memory()获取swap内存使用情况

实际操作如下(windows环境下):

import psutilmem = psutil.virtual_memory()print('系统内存:', mem)print('总 内存:', mem.total)print('空闲内存:', mem.available)print('使用内存:', mem.used)print('未使用内存:', mem.free)print('内存使用率:', mem.percent)print('swap 内存:', psutil.swap_memory())

输出结果:

系统内存: svmem(total=8494747648, available=5058498560, percent=40.5, used=3436249088, free=5058498560)总 内存: 8494747648空闲内存: 5058498560使用内存: 3436249088未使用内存: 5058498560内存使用率: 40.5swap 内存: sswap(total=15205634048, used=4902215680, free=10303418368, percent=32.2, sin=0, sout=0)

看到这些数字有点晕,我们更喜欢M或者G来堆内存进行描述,修改下代码:

import psutil#1M = 1024*1024#1G = 1024*1024*1024M = 1024*1024G = M * 1024mem = psutil.virtual_memory()print('系统内存:', mem)print('总 内存:%dM %fG'%(mem.total//M, mem.total/G))print('空闲内存:%dM %fG'%(mem.available//M, mem.available/G))print('使用内存:%dM %fG'%(mem.used//M, mem.used/G))print('未使用内存:%dM %fG'%(mem.free//M, mem.free/G))print('内存使用率:%d%%'% mem.percent)print('swap 内存:', psutil.swap_memory())

输出结果如下:

系统内存: svmem(total=8494747648, available=4726083584, percent=44.4, used=3768664064, free=4726083584)总 内存:8101M 7.911350G空闲内存:4507M 4.401508G使用内存:3594M 3.509842G未使用内存:4507M 4.401508G内存使用率:44%swap 内存: sswap(total=14668763136, used=5127331840, free=9541431296, percent=35.0, sin=0, sout=0)

1.4 获取系统磁盘

实际工作中我们需要关注硬盘空间及IO读写,如果硬盘空间不足就需要添加硬盘或者动态扩容,硬盘相应的方法如下:

方法说明
disk_partitions(all=False)获取硬盘分区信息,返回分区列表
disk_usage(path)获取硬盘使用情况,path为路径
disk_io_counters(perdisk=False, nowrap=True)硬盘IO读取信息

下面我们实际操作下:

import psutil#获取硬盘分区devs = psutil.disk_partitions()#显示硬盘信息:print(devs)#硬盘名称与挂载点,文件类型:for dev in devs:print('硬盘名:%s, 挂载点:%s, 文件类型:%s'%(dev.device, dev.mountpoint, dev.fstype))

输出结果如下:

[sdiskpart(device='C:\\', mountpoint='C:\\', fstype='NTFS', opts='rw,fixed'), sdiskpart(device='D:\\', mountpoint='D:\\', fstype='NTFS', opts='rw,fixed'), sdiskpart(device='E:\\', mountpoint='E:\\', fstype='NTFS', opts='rw,fixed'), sdiskpart(device='F:\\', mountpoint='F:\\', fstype='NTFS', opts='rw,fixed'), sdiskpart(device='G:\\', mountpoint='G:\\', fstype='NTFS', opts='rw,fixed')]硬盘名:C:\, 挂载点:C:\, 文件类型:NTFS硬盘名:D:\, 挂载点:D:\, 文件类型:NTFS硬盘名:E:\, 挂载点:E:\, 文件类型:NTFS硬盘名:F:\, 挂载点:F:\, 文件类型:NTFS硬盘名:G:\, 挂载点:G:\, 文件类型:NTFS

下面使用disk_usage方法来获取G盘使用情况:

#根据前面打印信息G盘使用'G:\'表示print(psutil.disk_usage('G:\'))

实际输出结果:

File "", line 2print(psutil.disk_usage('G:\'))^SyntaxError: EOL while scanning string literal

因为Python解释器将\'转义为单引号,所有会报错,在这里我们表示\表示反斜杠;
修改后代码:

import psutil#定义函数,参数为路径def showDiskInfo(path):G = 1024*1024*1024diskinfo = psutil.disk_usage(path)print(path, diskinfo)#将字节转换成Gprint('%s 大小: %dG, 已使用: %dG, 未使用: %dG, 使用百分比:%d%%'%\(path, diskinfo.total//G, diskinfo.used//G, diskinfo.free//G,diskinfo.percent))showDiskInfo('G:\\')
输出结果:​​​​​​​
G:\ sdiskusage(total=188978556928, used=166646931456, free=22331625472, percent=88.2)G:\ 大小: 175G, 已使用: 155G, 未使用: 20G, 使用百分比:88%

下面我们查看每个硬盘信息:

import psutil#定义函数,参数为路径def showDiskInfo(path):G = 1024*1024*1024diskinfo = psutil.disk_usage(path)#将字节转换成Gprint('%s 大小: %dG, 已使用: %dG, 未使用: %dG, 使用百分比:%d%%'%\(path, diskinfo.total//G, diskinfo.used//G, diskinfo.free//G,diskinfo.percent))#获取硬盘分区devs = psutil.disk_partitions()for dev in devs:#分别显示每个showDiskInfo(dev.device)

输出结果:

C:\ 大小: 118G, 已使用: 66G, 未使用: 51G, 使用百分比:56%D:\ 大小: 117G, 已使用: 10G, 未使用: 107G, 使用百分比:8%E:\ 大小: 150G, 已使用: 58G, 未使用: 92G, 使用百分比:38%F:\ 大小: 149G, 已使用: 71G, 未使用: 78G, 使用百分比:47%G:\ 大小: 175G, 已使用: 155G, 未使用: 20G, 使用百分比:88%

这样每个硬盘使用情况我们都清楚了。
最后我们来看硬盘读写,主要信息为:读写数,读写字节,读写时间,操作如下:

import psutildiskrw = psutil.disk_io_counters()#diskrw为硬盘总的读写信息print(diskrw)diskrws = psutil.disk_io_counters(perdisk=True)#diskrws为字典类型,表示每个分区读写信息,观察diskrw与diskrws值的关系print(diskrws)

输出信息:

sdiskio(read_count=2702580, write_count=3112627, read_bytes=92492292608, write_bytes=72206786048, read_time=2702, write_time=3049){'PhysicalDrive0': sdiskio(read_count=98229, write_count=392179, read_bytes=8924618240, write_bytes=4908920832, read_time=37, write_time=289), 'PhysicalDrive1': sdiskio(read_count=2604351, write_count=2720448, read_bytes=83567674368, write_bytes=67297865216, read_time=2665, write_time=2760)}

通过这些方法我们可以监控硬盘使用情况,如果硬盘空间不足,可以通过邮件报警,发送邮件方法我们后面章节详细讲解。

1.5 获取进程信息

计算机中,每个程序都是一个进程或者多个进程,除去系统占用资源其他都被这些进程占用,比如我们的web服务,数据库等;很多情况下因为程序自身问题,会导致CPU运行100%,内存耗尽,磁盘写满,最后导致服务崩溃,我们可以通过psutil下面2个方法获取进程相关信息,主要方法如下:

方法说明
psutil.pids()获取进程ID(每个进程都有唯一ID)
psutil.Process(pid)根据进程ID获取进程Process对象

实际操作:

import psutil#获取当前所有进程pids = psutil.pids()print(pids)#获取ID为pids[0]的进程,process = psutil.Process(pids[0])print(process)

输出结果:

[0, 4, 120, 440, 624, 736, 744, ... ...]psutil.Process(pid=0, name='System Idle Process', started='19:55:14')

结果中可以看到,进程的ID为0, 名称为'System Idle Process';
我们再来看Process对象属性(不同系统方法可能不同):​​​​​​​

import psutil#主要信息:进程名,状态,创建时间,CPU内存使用情况,线程数p = psutil.Process(0)print('进程名称:', p.name()) #进程名称print('运行状态:', p.status()) #当前状态print('创建时间:', p.create_time()) #创建时间print('CPU信息:', p.cpu_times()) #进程的cpu时间信息,主要:user,system运行时间print('内存信息:', p.memory_percent())#进程内存利用率print('内存使用:', p.memory_info()) #进程内存使用详情print('IO信息:', p.io_counters() ) #进程的IO信息,包括读写IO数字及参数print('线程数:', p.num_threads() ) #进程开启的线程数

输出结果如下:

进程名称: System Idle Process运行状态: running创建时间: 1543290248.0CPU信息: pcputimes(user=0.0, system=367377.99999999994, children_user=0.0, children_system=0.0)内存信息: 4.969912151832804e-05内存使用: pmem(rss=4096, vms=0, num_page_faults=2, peak_wset=4096, wset=4096, peak_paged_pool=0, paged_pool=0, peak_nonpaged_pool=0, nonpaged_pool=0, pagefile=0, peak_pagefile=0, private=0)IO信息: pio(read_count=0, write_count=0, read_bytes=0, write_bytes=0, other_count=0, other_bytes=0)线程数: 4

p.memory_info()返回pmem对象,其中rss为进程实际使用内存大小;

二、python获取磁盘使用、GPU信息、根据进程号获取进程信息,

pynvml 获取GPU信息,psutil 获取进程信息,系统信息等示例(另一台电脑)

1、代码:

import pynvml   #获取GPU信息
import psutil   #获取进程信息,系统信息等class Utils(object):# 获取硬盘信息@staticmethoddef get_disk_info(path):G = 1024*1024diskinfo = psutil.disk_usage(path)# 将字节转换成Ginfo = "path:%s  total:%dG,  used:%dG,  free:%dG,  used_percent:%d%%"%(path,diskinfo.total/G, diskinfo.used/G, diskinfo.free/G, diskinfo.percent)return info# 获取硬盘分区@staticmethoddef get_disk_partitions():return psutil.disk_partitions()# 获取当前所有进程@staticmethoddef get_current_process_pid():pids = psutil.pids()return pids# 获取进程信息@staticmethoddef get_process_info(pid):#主要信息:进程名,状态,创建时间,CPU内存使用情况,线程数p = psutil.Process(pid) # print('进程名称:', p.name())          #进程名称# print('运行状态:', p.status())        #当前状态# print('创建时间:', p.create_time())   #创建时间# print('CPU信息:',  p.cpu_times())     #进程的cpu时间信息,主要:user,system运行时间# print('内存信息:', p.memory_percent())#进程内存利用率# print('内存使用:', p.memory_info())   #进程内存使用详情# print('IO信息:', p.io_counters())   #进程的IO信息,包括读写IO数字及参数# print('线程数:', p.num_threads())   #进程开启的线程数info = "name:{}  pid:{}  \nstatus:{}  \ncreate_time:{}  \ncpu_times:{}  \nmemory_percent:{}  \nmemory_info:{}  \nio_counters:{}  \nnum_threads:{}".format(p.name(), pid, p.status(), p.create_time(), p.cpu_times(), p.memory_percent(), p.memory_info(), p.io_counters(), p.num_threads())  return infoclass GpuInfo(object):def __init__(self):#初始化pynvml.nvmlInit()def get_gpu_device(self):deviceCount = pynvml.nvmlDeviceGetCount()gpu_list = []for i in range(deviceCount):handle = pynvml.nvmlDeviceGetHandleByIndex(i)print("GPU", i, ":", pynvml.nvmlDeviceGetName(handle))gpu_list.append(i)return gpu_listdef get_free_rate(self, gpu_id):handle = pynvml.nvmlDeviceGetHandleByIndex(gpu_id)info = pynvml.nvmlDeviceGetMemoryInfo(handle)free_rate = int((info.free / info.total) * 100)return free_ratedef get_gpu_info(self, gpu_id):handle = pynvml.nvmlDeviceGetHandleByIndex(gpu_id)info = pynvml.nvmlDeviceGetMemoryInfo(handle)M = 1024*1024gpu_info = "id:{}  total:{}M free:{}M  used:{}M free_rate:{}%".format(gpu_id, info.total/M, info.free/M, info.used/M, self.get_free_rate(gpu_id))return gpu_infodef release(self):#最后要关闭管理工具pynvml.nvmlShutdown()if __name__ == "__main__":print("磁盘信息----------------------------")devs = Utils.get_disk_partitions()for dev in devs:print(Utils.get_disk_info(dev.device))print(Utils.get_disk_info("/home"))print(Utils.get_disk_info("/data"))print("进程信息----------------------------")# # 需要管理员权限# pids = Utils.get_current_process_pid()# for pid in pids:#     print(Utils.get_process_info(pid))print(Utils.get_process_info(6403))print("GPU信息----------------------------")gpu_info = GpuInfo()gpu_devices = gpu_info.get_gpu_device()print("GPU使用信息----------------------------")for gpuid in gpu_devices:print(gpu_info.get_gpu_info(gpuid))gpu_info.release()

2、结果:

xy@avs05:~/test_code/test$ python utils.py 
磁盘信息----------------------------
path:/dev/sda1  total:128773G,  used:0G,  free:128773G,  used_percent:0%
path:/dev/sdb1  total:128773G,  used:0G,  free:128773G,  used_percent:0%
path:/home  total:899747G,  used:844714G,  free:9306G,  used_percent:98%
path:/data  total:6811979G,  used:3515451G,  free:2953201G,  used_percent:54%
进程信息----------------------------
name:python  pid:6403  
status:sleeping  
create_time:1572787886.51  
cpu_times:pcputimes(user=16.6, system=2.32, children_user=0.0, children_system=0.0)  
memory_percent:0.01580510616382157  
memory_info:pmem(rss=42692608, vms=510906368, shared=8900608, text=2342912, lib=0, data=56336384, dirty=0)  
io_counters:pio(read_count=5249, write_count=8001, read_bytes=16384, write_bytes=26464256, read_chars=1097175, write_chars=24049039)  
num_threads:2
GPU信息----------------------------
GPU 0 : b'GeForce RTX 2080 Ti'
GPU 1 : b'GeForce RTX 2080 Ti'
GPU 2 : b'GeForce RTX 2080 Ti'
GPU 3 : b'GeForce RTX 2080 Ti'
GPU 4 : b'GeForce RTX 2080 Ti'
GPU 5 : b'GeForce RTX 2080 Ti'
GPU 6 : b'GeForce RTX 2080 Ti'
GPU 7 : b'GeForce RTX 2080 Ti'
GPU使用信息----------------------------
id:0  total:10989.4375M free:7344.9375M  used:3644.5M free_rate:66%
id:1  total:10989.4375M free:6308.9375M  used:4680.5M free_rate:57%
id:2  total:10989.4375M free:10876.5625M  used:112.875M free_rate:98%
id:3  total:10989.4375M free:10978.5625M  used:10.875M free_rate:99%
id:4  total:10989.4375M free:10978.5625M  used:10.875M free_rate:99%
id:5  total:10989.4375M free:10978.5625M  used:10.875M free_rate:99%
id:6  total:10989.4375M free:9497.5625M  used:1491.875M free_rate:86%
id:7  total:10989.4375M free:5090.0625M  used:5899.375M free_rate:46%

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473207.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 907. 子数组的最小值之和(单调栈)

文章目录1. 题目2. 解题1. 题目 给定一个整数数组 A,找到 min(B) 的总和,其中 B 的范围为 A 的每个(连续)子数组。 由于答案可能很大,因此返回答案模 10^9 7。 示例: 输入:[3,1,2,4] 输出&a…

Python环境下,提高pip安装库速度的方法!

一、前言 学习 Python 的话,仅掌握标准库是远不够的,有很多好用的第三方库我们也需要用到的 大家发现 pip install 包名 的方式 安装第三方库的时候,下载速度很慢,有时还会超时,遇到第三方库比较大时候,…

静态变量与静态方法

1.静态变量在C#程序中,没有全局变量的概念,这意味着所有的成员变量只有该类的实例才能操作这些数据,这起到了“信息隐藏”的作用。但有些时候,这样做却不是个明智的选择。假设我们要定义一个图书类,要求该类…

LeetCode 792. 匹配子序列的单词数(二分查找)

文章目录1. 题目2. 解题1. 题目 给定字符串 S 和单词字典 words, 求 words[i] 中是 S 的子序列的单词个数。 示例: 输入: S "abcde" words ["a", "bb", "acd", "ace"] 输出: 3 解释: 有三个是 S 的子序列的单词: "…

利用Python从字幕网上下载自己所需要的字幕(热门电影、美剧等)

一、前言 主要需求:利用python从字幕库网站上下载字幕 字幕网址:http://www.zimuku.la/ 二、方法: 1、打开网站,搜索自己所需要的字幕: 2、开始写代码: a、配置标头,手动输入下载的字幕名字…

ASP.NET开发,简化与封装

微软的ASP.NET的开发,就是面向对象的编程,当然前端也能体验至面向对象的话,使用Web控件也必须的。任一控件,我们均可以在后端.aspx.cs或.aspx.vb程序中new一个对象出来。很多场合里,在开发ASP.NET开发中,后…

调用Django中的API时,使用Pycharm给后端view打断点的方法

一、前言 使用Pycharm写后端很便捷,但是项目运行后,无法找到简洁的debug方法,本文主要以图文形式,说明一下利用Postman与Pycharm来给项目debug 二、方法 1、使用Pycharm打开项目文件,点击右上角,编辑配置文…

[Kaggle] Spam/Ham Email Classification 垃圾邮件分类(BERT)

文章目录1. 数据处理2. 下载预训练模型3. 加载数据4. 定义模型5. 训练6. 提交测试结果练习地址:https://www.kaggle.com/c/ds100fa19 相关博文: [Kaggle] Spam/Ham Email Classification 垃圾邮件分类(spacy) [Kaggle] Spam/Ham E…

python 中main函数总结

Python使用缩进对齐组织代码的执行,所有没有缩进的代码(非函数定义和类定义),都会在载入时自动执行,这些代码,可以认为是Python的main函数。 每个文件(模块)都可以任意写一些没有缩进…

python从图片里提取主要颜色

一、需求: 从一张图片里提取主要的几种颜色 二、效果: 三、代码 from PIL import Image, ImageDraw, ImageFontdef get_dominant_colors(infile):image Image.open(infile)# 缩小图片,否则计算机压力太大small_image image.resize((80, …

LeetCode 790. 多米诺和托米诺平铺(动态规划)

文章目录1. 题目2. 解题1. 题目 有两种形状的瓷砖&#xff1a; 一种是 2x1 的多米诺形&#xff0c; 另一种是形如 “L” 的托米诺形。 两种形状都可以旋转。 XX <- 多米诺XX <- "L" 托米诺 X给定 N 的值&#xff0c;有多少种方法可以平铺 2 x N 的面板&…

Django后端编辑图片提取主要颜色API

一、需求 前端页面需要调用后端API&#xff0c;实现获取主要颜色json数据 二、图片效果 三、代码实现&#xff1a; # Create your views here. import os from django.core.files.storage import default_storage from django.http import HttpResponse, JsonResponse from …

js:获取本周日期

<html> <head> <script> function formOnload() { //按周日为一周的最后一天计算var date new Date();var this_day date.getDay(); //今天是这周的第几天var step_s -this_day1; //上周日距离今天的天数&#xff08;负数表示&#xff09;if (this_day 0…

LeetCode 898. 子数组按位或操作(前缀和思想)

文章目录1. 题目2. 解题2.1 超时解2.2 正解1. 题目 我们有一个非负整数数组 A。 对于每个&#xff08;连续的&#xff09;子数组 B [A[i], A[i1], ..., A[j]] &#xff08; i < j&#xff09;&#xff0c;我们对 B 中的每个元素进行按位或操作&#xff0c;获得结果 A[i] …

Linux命令行配置静态IP地址

一、前言 IP地址分为了A-E共计5类地址&#xff0c;其中A、B、C在全球范围内统一分配&#xff0c;D、E为特殊地址。 A类地址&#xff1a;第一段为网络号&#xff0c;剩下三段都是主机号&#xff0c;最大主机数1600W&#xff0c;私有IP地址是10.0.0.0-10.255.255.255 B类地址&…

C#中用委托实现C++的回调函数

C中抓图回调函数 void (CALLBACK* DisplayCBFun)(long nPort,char * pBuf,long nSize,long nWidth,long nHeight,long nStamp,long nType,long nReceaved)); C#中定义为委托 public delegate void DisplayCBFun(int nPort, IntPtr pBuf, int nSize, int nWidth, int nHeight, …

天池 在线编程 回合制游戏(前缀和)

文章目录1. 题目2. 解题1. 题目 QW 是一个回合制游戏的玩家&#xff0c;今天他决定去打怪。 QW 在一场战斗中会碰到 n 个怪物&#xff0c;每个怪物有攻击力 atk[i]&#xff0c;每回合结束时如果第 i 个怪物还活着&#xff0c;就会对 QW 造成 atk[i] 的伤害。 QW 只能在每回合…

Python程序员的圣经——《Python编程快速上手:让繁琐工作自动化》尾末附下载地址

一、前言 如今&#xff0c;人们面临的大多数任务都可以通过编写计算机软件来完成。Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。通过Python编程&#xff0c;我们能够解决现实生活中的很多任务。 今天给大家分享一份Python程序员的圣经——《Python编程快…

POJ 3608

1.计算P上y坐标值最小的顶点&#xff08;称为 yminP &#xff09;和Q上y坐标值最大的顶点&#xff08;称为 ymaxQ&#xff09;。 2.为多边形在 yminP 和 ymaxQ 处构造两条切线 LP 和 LQ 使得他们对应的多边形位于他们的右侧。 此时 LP 和 LQ 拥有不同的方向&#xff0c; 并且 y…

天池 在线编程 聪明的销售(计数+贪心)

文章目录1. 题目2. 解题1. 题目 销售主管的任务是出售一系列的物品&#xff0c;其中每个物品都有一个编号。 由于出售具有相同编号的商品会更容易&#xff0c;所以销售主管决定删除一些物品。 现在她知道她最多能删除多少物品&#xff0c;她想知道最终袋子里最少可以包含多少…