进程池-限制同一时间在CPU上运行的进程数
2017-08-14 17:22
218 查看
if __name__=='__main__' : 为了区分你是主动执行这个脚本,还是从别的地方把它当做一个模块去调用。
如果是主动执行,则执行。如果是调用的,则不执行主体。
1. 串行:切记切记:pool.close()必须在pool.join() 之前。
运行结果:
2. 5个一组并行执行
运行结果:
3. 通过进程号得知,运行callback的是主进程
运行结果:每个进程执行完,都执行callback
如果是主动执行,则执行。如果是调用的,则不执行主体。
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上运行
- linux top cset schedtool 对于多核CPU,如何限制进程在一个CPU上运行
- 限制某个进程只能在某个CPU上运行
- 如何指定进程运行的CPU
- ######Nginx配置文件nginx.conf中文详解##### #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数。 worke
- Linux 有问必答:如何知道进程运行在哪个 CPU 内核上?
- 多处理器系统在指定cpu上运行进程
- Linux中如何限制一个进程的CPU占用率?
- Linux 进程、线程运行在指定CPU核上
- linux中限制用户进程CPU和内存占用率
- 如何设置进程(线程)在指定的CPU上运行
- linux下让进程运行在指定的cpu上
- linux 下进程和线程指定CPU运行
- powershell限制进程的CPU的相似性(Set Affinity)
- 怎么限制一个应用程序进程使用指定的cpu
- 如何指定进程运行的CPU
- taskset榨干服务器CPU:让进程运行在指定的CPU内核
- LXC linux容器简介——在操作系统层次上为进程提供的虚拟的执行环境,限制其使用的CPU和mem等资源,底层是linux内核资源管理的cgroups子系统
- taskset: 让进程运行在指定的CPU