Python程序员都知道的入门知识の九

作者: 耑意儿 | 来源:发表于2017-01-10 22:17 被阅读698次
目录:
1. 多线程练习
2. psutil初识
3. 小知识

目录【Python程序员都知道的入门知识】


python自学之路

1. 多线程练习

for循环启动五条线程,打印当前处于活跃状态的线程数量:


Paste_Image.png

问题出现了,明明for循环五次,加上一条主线程也就才六条线程,怎么打印出来的却是 <a>''current has 7 threads''</a>,多出一条是什么?
遍历出所有线程(如下图),可以看出多了一条SockThread 守护线程。


Paste_Image.png

那么什么是SockThread,这个线程又是怎么出现的?
待续。。。
在追查过程中发现了一个模块:psutil

2. psutil初识

2.1. psutil是什么?

来看看官方说明:

Paste_Image.png

psutil,即process and system utilities。
是一个用于检索当前正在运行的进程和系统资源使用情况(包括:CPU,内存,磁盘、网络等)的跨平台库。
目前在github上有超过4200个开源工程中使用到了psutil
官网中推荐了这个:Sample,可以参考着练一练。

2.2. 安装

我是在Windows 64下装了python2.7 ,所以我下载安装了:
psutil-5.0.1.win-amd64-py2.7.exe
psutil官方下载地址
psutil官方文档

2.3. 与系统相关的函数

2.3.1. CPU

处理器时间
1、psutil.cpu_times(percpu = False)
返回一个名为scputimes的元组
2、psutil.cpu_times(percpu = True)
返回一个名为scputimes的元组列表(每个CPU处理器的各种模式的时间)

实际返回的(无论是单个元组还是元组列表中的)元素也跟系统有关。以下是通有元素说明:

  • user:处理器处理用户(Linux下包括游客)所用的时间
  • system:处理器处理系统内核所用的时间
  • idle:什么都不做所花的事

与平台相关的元素:

  • nice 【UNIX】
  • iowait 【Linux】
  • irq【Linux,BSD】
  • softirq 【Linux】
  • steal 【Linux 2.6.11+】
  • guest【Linux 2.6.24+】
  • guest_nice 【Linux 3.2.0+】
  • interrupt 【Windows】
  • dpc 【Windows】
Paste_Image.png
处理器使用频率
1、psutil.cpu_percent(interval=None, percpu=False)
2、psutil.cpu_times_percent(interval=None, percpu=False)
处理器数量
psutil.cpu_count(logical=True)
处理器数据
psutil.cpu_stats() Paste_Image.png

2.3.2. Memory

虚拟内存
psutil.virtual_memory()
交换内存
psutil.swap_memory()

Paste_Image.png

2.3.3. Disks

磁盘分配
psutil.disk_partitions(all = False)
磁盘使用情况
psutil.disk_usage(path)
磁盘读写计数器
psutil.disk_io_counters(perdisk = False)

Paste_Image.png

2.3.4. Network

网络读写计数器
psutil.net_io_counters(pernic = False)
网络连接
psutil.net_connections(kind = 'inet')

Paste_Image.png

网络适配器关联的地址
psutil.net_if_addrs()
网络适配器数据
psutil.net_if_stats()

Paste_Image.png

2.3.5. 其他系统信息

引导时间
psutil.boot_time()
系统当前用户
psutil.users()

Paste_Image.png

2.4. psutil操作进程

2.4.1. 函数

正在运行的进程ID列表
psutil.pids()(为避免出现竞争条件,不推荐使用)
根据进程ID判断进程是否在运行列表中
psutil.pid_exists(pid)
进程ID迭代器
psutil.process_iter()
等待列表进程结束
psutil.wait_procs(procs,timeout = none , callback = none)

2.4.2. 进程异常类

异常基类
class psutil.Error
无此进程
class psutil.NoSuchProcess(pid ,name = none ,msg = none )
僵尸进程
class psutil.ZombieProcess(pid ,name = none ,ppid =none , msg = none)
拒绝访问
class psutil.AccessDenied(pid = none , name = none ,msg = none)
超时时间已到
class psutil.TimeoutExpired(second , pid =none ,name = none ,msg = none)

2.4.3. 进程类Process

class psutil.Process(pid = none)
函数:(详情移步:psutil.processes

  • oneshot()
  • pid
  • ppid()
  • name()
  • exe()
  • cmdline()
  • environ()
  • create_time()
  • ad_dict(attrs = none ,ad_value = none)
  • parent()
  • status()
  • cwd()
  • username()
  • uids()
  • gids()
  • terminal()
  • nice(value = none)
  • idnice(ioclass = none ,value = none)
  • rlimit(resource , limits = none)
  • io_counters()
  • num_ctx_switches()
  • num_fds()
  • num_handles()
  • num_threads()
  • threads()
  • cpu_times()
  • cpu_percent(interval = none)
  • cpu_affinity(cpus = none)
  • memory_info()
  • memory_ex()
  • memory_full_info()
  • memory_percent(memtype = 'rss')
  • memory_maps(groups =Ture)
  • children(recursive = False)
  • open_files()
  • connections(kind = 'inet')
  • is_running()
  • send_signal(signal)
  • suspend()
  • resume()
  • terminate()
  • kill()
  • wait(timeout = none)

2.4.4. 进程开启类Popen

class psutil.Popen(*args , **kwargs)
用Popen打开两个应用进程:Foxmail.exeMockingBot.exe,然后结束并杀掉这两个进程。

Paste_Image.png
运行结果: Paste_Image.png

2.4. Windows系统下的 services

系统服务迭代器
psutil.win_service_iter()
根据名字获取服务
psutil.win_service_get(name)
Windows服务对象
class psutil.WindowsService

  • name()
  • display_name()
  • binpath()
  • username()
  • start_type()
  • pid()
  • status()
  • description()
  • as_dict()

2.5. 常量

Constants

3. 小知识

3.1. python的传参

python传参的时候可以带上形式参数名,如本文中的例子:
psutil.cpu_times(False)
也可以写成:
psutil.cpu_times(percpu = False)

Paste_Image.png

3.2. python的迭代器

假设现在拿到一个迭代器,it
如:it = psutil.win_service_iter()
单个获取迭代器中的元素:
it.next()
for循环获取元素:

for i in it:
    print i

3.3. 僵尸进程

进程在调用exit命令结束自己生命的时候并没有真正被销毁,而是转为僵尸状态,称为一个僵尸进程
僵尸进程需要由他的父进程来收尸,如果父进程结束则转而由初始化进程来收尸。

相关文章

网友评论

    本文标题:Python程序员都知道的入门知识の九

    本文链接:https://www.haomeiwen.com/subject/xudkbttx.html