进程池-限制同一时间在CPU上运行的进程数
if __name__=='__main__' : 为了区分你是主动执行这个脚本,还是从别的地方把它当做一个模块去调用。
如果是主动执行,则执行。如果是调用的,则不执行主体。
1. 串行:切记切记:pool.close()必须在pool.join() 之前。
from multiprocessing import Process,Pool
import time
import os def Foo(i):
time.sleep(1)
print('in process',os.getpid())
return i + 100 def Bar(arg):
print('-->exec done:', arg) if __name__=='__main__':
pool = Pool(processes=5) #允许进程池里同时放入5个进程.虽然启用了10个,但是CPU只允许5个同时运行。其他的5个处于挂起状态。
for i in range(10):
#pool.apply_async(func=Foo, args=(i,), callback=Bar) #并行
pool.apply(func=Foo, args=(i,)) #串行 print('end')
pool.close()
pool.join() # 进程池中进程执行完毕后再关闭,如果没有这句,那么程序不等进程执行完就直接关闭了。
运行结果:
in process 13460
in process 5804
in process 8488
in process 10076
in process 12604
in process 13460
in process 5804
in process 8488
in process 10076
in process 12604
end
2. 5个一组并行执行
from multiprocessing import Process,Pool
import time
import os def Foo(i):
time.sleep(1)
print('in process',os.getpid())
return i + 100 def Bar(arg):
print('-->exec done:', arg) if __name__=='__main__':
pool = Pool(processes=5) #允许进程池里同时放入10个进程.虽然启用了5个,但是CPU只允许5个同时运行。其它的都在挂起状态。
for i in range(10):
pool.apply_async(func=Foo, args=(i,), callback=Bar) #并行
#pool.apply(func=Foo, args=(i,)) #串行 print('end')
pool.close()
pool.join() # 进程池中进程执行完毕后再关闭,如果注释,那么程序直接关闭。
运行结果:
end
in process 11276
in process 8760
-->exec done: 100
-->exec done: 102
in process 12316
-->exec done: 101
in process 10916
-->exec done: 103
in process 13648
-->exec done: 104
in process 8760
-->exec done: 106
in process 11276
-->exec done: 105
in process 12316
-->exec done: 107
in process 10916
-->exec done: 108
in process 13648
-->exec done: 109
3. 通过进程号得知,运行callback的是主进程
from multiprocessing import Process,Pool
import time
import os def Foo(i):
time.sleep(1)
print('in process',os.getpid())
return i + 100 def Bar(arg):
print('-->exec done:', arg,os.getpid()) if __name__=='__main__':
pool = Pool(processes=5) #允许进程池里同时放入10个进程.虽然启用了5个,但是CPU只允许5个同时运行。
print("主进程",os.getpid())
for i in range(10):
pool.apply_async(func=Foo, args=(i,), callback=Bar) #并行callback=回调,意思是执行完func=Foo以后,再执行callback=Bar.是主进程执行的回调。
#pool.apply(func=Foo, args=(i,)) #串行 print('end')
pool.close()
pool.join() # 进程池中进程执行完毕后再关闭,如果注释,那么程序直接关闭。
运行结果:每个进程执行完,都执行callback
主进程 5160
end
in process 15512
-->exec done: 102 5160
in process 14180
-->exec done: 100 5160
in process 15748
-->exec done: 101 5160
in process 15844
-->exec done: 103 5160
in process 13716
-->exec done: 104 5160
in process 15512
in process 14180
-->exec done: 105 5160
-->exec done: 106 5160
in process 15748
-->exec done: 107 5160
in process 15844
-->exec done: 108 5160
in process 13716
-->exec done: 109 5160
进程池-限制同一时间在CPU上运行的进程数的更多相关文章
- 限制某个进程只能在某个CPU上运行
首先可以调用GetSystemInfo查看有多少个CPU,再通过调用: BOOL WINAPI SetProcessAffinityMask( __in HANDLE hProcess, __in D ...
- 有趣的taskset命令,使进程再指定CPU上运行
前言 taskset命令,用于进程的CPU调优,可以把某进程,指定再某CPU内工作. 如还不明白,可以参考此文 http://www.361way.com/linux-context-switch/5 ...
- 在CPU上运行Tensorflow
如果你是用的GPU版本的Tensorflow,你可以这样来使用CPU版本的Tensorlfow: config = tf.ConfigProto( device_count = {'GPU': 0} ...
- taskset: 让进程运行在指定的CPU 上
观察发现4核CPU,只有第1个核心(CPU#0)非常忙,其他都处于idle状态. 不了解Linux是如何调度的,但目前显然有优化的余地.除了处理正常任务,CPU#0还需要处理每秒网卡中断.因此,若能将 ...
- linux 将进程或者线程绑定到指定的cpu上
基本概念 cpu亲和性(affinity) CPU的亲和性, 就是进程要在指定的 CPU 上尽量长时间地运行而不被迁移到其他处理器,也称为CPU关联性:再简单的点的描述就将指定的进程或线程绑定到相应的 ...
- python 进程池(multiprocessing.Pool)和线程池(threadpool.ThreadPool)的区别与实例
一般我们是通过动态创建子进程(或子线程)来实现并发服务器的,但是会存在这样一些缺点: 1.动态创建进程(或线程)比较耗费时间,这将导致较慢的服务器响应. 2.动态创建的子进程通常只用来为一个客户服务 ...
- windows 下进程池的操作
在Windows上创建进程是一件很容易的事,但是在管理上就不那么方便了,主要体现在下面几个方面: 1. 各个进程的地址空间是独立的,想要在进程间共享资源比较麻烦 2. 进程间可能相互依赖,在进程间需要 ...
- python并发编程之多进程(三):共享数据&进程池
一,共享数据 展望未来,基于消息传递的并发编程是大势所趋 即便是使用线程,推荐做法也是将程序设计为大量独立的线程集合 通过消息队列交换数据.这样极大地减少了对使用锁定和其他同步手段的需求, 还可以扩展 ...
- 线程池、进程池(concurrent.futures模块)和协程
一.线程池 1.concurrent.futures模块 介绍 concurrent.futures模块提供了高度封装的异步调用接口 ThreadPoolExecutor:线程池,提供异步调用 Pro ...
随机推荐
- Linux管道及I/O重定向
I/O: 系统设定 默认输入设备:标准输入,STDIN,0 默认输出设备:标准输出,STDOUT,1 标准错误输出:STDERR,2 属于不同的数据流 标准输入:键盘 标准输出和错误输出:显示器 I/ ...
- 前端开发工程师 - 03.DOM编程艺术 - 期末考试
期末考试客观题 返回 倒计时: 01:24 1 单选(2分) 以下选项中不是节点类型的是 A. COMMENT_NODE B. DOCUMENT_NODE C. BODY_NODE D. E ...
- Git命令使用大全
一前言 最近公司在使用vue和WebAPI前后端分离的项目开发,使用的代码管理工具是git,刚开始使用的时候前端的vue文件还比较好处理,但是后端的C#文件在每一次自己编译之后上传都会和其他小伙伴的代 ...
- CodeForces 838B Diverging Directions 兼【20180808模拟测试】t3
描述 给你一个图,一共有 N 个点,2*N-2 条有向边. 边目录按两部分给出 1. 开始的 n-1 条边描述了一颗以 1 号点为根的生成树,即每个点都可以由 1 号点到达. 2. 接下来的 N-1 ...
- python作业:三级菜单(第一周)
一.作业需求: 1. 运行程序输出第一级菜单 2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单 3. 菜单数据保存在文件中 4. 让用户选择是否要退出 5. 有返回上一级菜单的功能 二.三级菜单 ...
- C语言struct中的长度可变数组(Flexible array member)
C_struct中的长度可变数组(Flexible array member) Flexible array member is a feature introduced in the C99 sta ...
- sqlserver 2008 merger语句
Merge关键字是一个神奇的DML关键字.它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句.MSDN对于Merge的解释非常的短小精悍:”根据与源 ...
- POJ 2287 田忌赛马 贪心算法
田忌赛马,大致题意是田忌和国王赛马,赢一局得200元,输一局输掉200元,平局则财产不动. 先输入一个整数N,接下来一行是田忌的N匹马,下一行是国王的N匹马.当N为0时结束. 此题为贪心算法解答,有两 ...
- Icingaweb2监控oracle数据库的安装配置流程
Icinga2安装配置check_oracle_health流程 1.安装 由于check_oracle_health是使用perl语言编写的,因此在安装该插件之前,首先要安装oracle的客户端实例 ...
- 物联网常见通信协议RFID、NFC、Bluetooth、ZigBee等梳理
1 概述 在上一篇文章<物联网常见通信协议与通讯协议梳理[上]-通讯协议>中,对物联网常用通信协议和通讯协议作了区分,并对通讯协议进行了分享:本文将对常用的通信协议进行剖析,重点面向市场 ...