https://www.cnblogs.com/devilmaycry812839668/p/17066212.html中知道如何对python进程设置CPU绑定,本文对此进行一些延伸,给出一些例子:

代码1:

import os
from multiprocessing import Process
import time cpu_avia = os.sched_getaffinity(os.getpid()) os.sched_setaffinity(os.getpid(), list(cpu_avia)[:2]) # 绑定两个核心 def func():
while True:
pass process = [Process(target=func) for i in range(2)]
for proc in process:
proc.start() time.sleep(600)

可以看到在父进程中设置绑定两个CPU,那么另个子进程每个的单CPU利用率均可以达到100% 。

现在的疑问是这个绑定2个CPU后子进程和父进程是不是一同绑在了这2个CPU上,如果父进程也进行死循环运行那么每个进程的利益率会是多少,因此给出第二个代码:

代码2:

import os
from multiprocessing import Process cpu_avia = os.sched_getaffinity(os.getpid())
print(cpu_avia) os.sched_setaffinity(os.getpid(), list(cpu_avia)[:2]) # 绑定两个核心 def func():
while True:
pass process = [Process(target=func) for i in range(2)]
for proc in process:
proc.start() func()

可以看到父进程和两个子进程的利用率总和约为200%,也就是说父进程和两个子进程被绑定到这两个CPU上,因此三个进程的CPU利用率总和为200%。

通过上面的两个例子我们知道在父进程中绑定多个CPU其实还不能很好的对子进程的CPU绑定起到细粒度的控制,为此我们给出更细粒度的绑定的例子:

代码3:

import os
from multiprocessing import Process cpu_avia = os.sched_getaffinity(os.getpid())
print(cpu_avia) os.sched_setaffinity(os.getpid(), list(cpu_avia)[:2]) # 绑定两个核心 def func(id):
os.sched_setaffinity(os.getpid(), list(cpu_avia)[id:id+1]) # 绑定两个核心
while True:
pass process = [Process(target=func, args=(i+1, )) for i in range(2)]
for proc in process:
proc.start() func(0)

===================================

参考:

https://www.cnblogs.com/devilmaycry812839668/p/17066212.html

https://blog.csdn.net/weixin_39755712/article/details/111434443

python进程绑定CPU的一些Demo的更多相关文章

  1. linux下进程绑定cpu情况查看的几种方法

    1.pidstat命令 查看进程使用cpu情况,如果绑定了多个cpu会都显示出来 pidstat -p `pidof 进程名` -t 1 2.top命令 (1)top (2)按f键可以选择下面配置选项 ...

  2. NGINX源代码剖析 之 CPU绑定(CPU亲和性)

    作者:邹祁峰 邮箱:Qifeng.zou.job@gmail.com 博客:http://blog.csdn.net/qifengzou 日期:2014.06.12 18:44 转载请注明来自&quo ...

  3. Ubuntu系统进程绑定CPU核

    Ubuntu系统进程绑定CPU核 作者:chszs.版权全部,未经允许,不得转载. 博主主页:http://blog.csdn.net/chszs 本文讲述如何在Ubuntu系统中,把指定的进程绑定到 ...

  4. Linux编程之《进程/线程绑定CPU》

    Intro----- 通常我们在编写服务器代码时,可以通过将当前进程绑定到固定的CPU核心或者线程绑定到固定的CPU核心来提高系统调度程序的效率来提高程序执行的效率,下面将完整代码贴上. /***** ...

  5. Nginx 关于进程数 与CPU核心数相等时,进程间切换的代价是最小的-- 绑定CPU核心

    在阅读Nginx模块开发与架构模式一书时: "Nginx  上的进程数 与CPU核心数相等时(最好每个worker进程都绑定特定的CPU核心),进程间切换的代价是最小的;" &am ...

  6. Linux 和 Windows 查看当前运行的 python 进程及 GPU、CPU、磁盘利用率

    目录 查看当前 python 进程 Linux Windows 查看 GPU 利用率 Linux Windows Linux CPU 利用率 Linux 磁盘利用率 查看当前 python 进程 Li ...

  7. 线程或进程绑定到特定的cpu

    常用的宏定义有: 1) 对cpu集进行初始化, 将其设置为空集 void CPU_ZERO(cpu_set_t *set); 2) 将指定的cpu加入到cpu集中 void CPU_SET(int c ...

  8. 【笔记】Linux进程间同步和进程绑定至特定cpu

    #define _GNU_SOURCE #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> ...

  9. Python测试进阶——(5)Python程序监控指定进程的CPU和内存利用率

    用Python写了个简单的监控进程的脚本monitor190620.py,记录进程的CPU利用率和内存利用率到文件pid.csv中,分析进程运行数据用图表展示. 脚本的工作原理是这样的:脚本读取配置文 ...

  10. Python 进程线程协程 GIL 闭包 与高阶函数(五)

    Python 进程线程协程 GIL 闭包 与高阶函数(五) 1 GIL线程全局锁 ​ 线程全局锁(Global Interpreter Lock),即Python为了保证线程安全而采取的独立线程运行的 ...

随机推荐

  1. ColorEasyDuino上手指南

    介绍 ColorEasyDuino是嘉立创推出的一块Aduino开发板(类似物),具有丰富的外设接口:uart.i2c.spi.adc.pwm等:开发板设计参考原型是Arduino Uno,采用的芯片 ...

  2. Next.js 13 如何使用loading.js

    要在next.js 13中使用loading.js,我们需要先在对应的文件目录下创建loading.js文件 文件结构如下: app test1 loading.tsx page.tsx 如上面的目录 ...

  3. golang reflect 反射机制的使用场景

    Go语言中的 reflect 包提供了运行时反射机制,允许程序在运行时检查和操作任意对象的数据类型和值. 以下是 reflect 包的一些典型使用场景: 1. 动态类型判断与转换:当需要处理多种类型的 ...

  4. Lecture4

    Smiling & Weeping ---- 行于山水之间 权且停留 无所谓风起叶落,浮光敛形 此刻   身即自由 第四章 Git 工具 Author: Martin 本章主要介绍 Git 常 ...

  5. Python遥感影像叠加分析:基于一景数据提取另一数据

      本文介绍基于Python中GDAL模块,实现基于一景栅格影像,对另一景栅格影像的像元数值加以叠加提取的方法.   本文期望实现的需求为:现有一景表示6种不同植被类型的.tif格式栅格数据,以及另一 ...

  6. spark读取hive表,org.apache.spark.sql.AnalysisException: Unsupported data source type for direct query on files: hive;

    异常出现:spark读取hive表时,spark.read.table(hive.test) hdp版本的spark默认的catalog是spark,配置项 metastore.catalog.def ...

  7. 支持TraceID、错误文件、错误行的第三方golang库:gerror

    Gerr库简介 Golang第三方库 官方仓库:https://github.com/GuoFlight/gerror 特点: 兼容golang原生error库 gerror会自动生成traceID, ...

  8. Linux 内核:设备树(3)把device_node转换成platfrom_device

    Linux 内核:设备树(3)把device_node转换成platfrom_device 背景 在上一节中讲到设备树dtb文件中的各个节点转换成device_node的过程(<dtb转换成de ...

  9. STM32 CubeMX 学习:000-搭建开发环境

    背景 了解了 STM32 标准库以后,为了紧跟发展的潮流,我们以 CubeMx为基础 开始进行 Hal(Hardware Abstract Layer, 硬件抽象层)库的学习. CubeMx 是一个 ...

  10. 中间件-Nginx

    一.nginx反向代理 输入 http://xxx.com/plat/login 跳转: http://localhost:8383/plat/login 将某个指定的域名代理到指定的服务 http: ...