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上运行的进程数的更多相关文章

  1. 限制某个进程只能在某个CPU上运行

    首先可以调用GetSystemInfo查看有多少个CPU,再通过调用: BOOL WINAPI SetProcessAffinityMask( __in HANDLE hProcess, __in D ...

  2. 有趣的taskset命令,使进程再指定CPU上运行

    前言 taskset命令,用于进程的CPU调优,可以把某进程,指定再某CPU内工作. 如还不明白,可以参考此文 http://www.361way.com/linux-context-switch/5 ...

  3. 在CPU上运行Tensorflow

    如果你是用的GPU版本的Tensorflow,你可以这样来使用CPU版本的Tensorlfow: config = tf.ConfigProto( device_count = {'GPU': 0} ...

  4. taskset: 让进程运行在指定的CPU 上

    观察发现4核CPU,只有第1个核心(CPU#0)非常忙,其他都处于idle状态. 不了解Linux是如何调度的,但目前显然有优化的余地.除了处理正常任务,CPU#0还需要处理每秒网卡中断.因此,若能将 ...

  5. linux 将进程或者线程绑定到指定的cpu上

    基本概念 cpu亲和性(affinity) CPU的亲和性, 就是进程要在指定的 CPU 上尽量长时间地运行而不被迁移到其他处理器,也称为CPU关联性:再简单的点的描述就将指定的进程或线程绑定到相应的 ...

  6. python 进程池(multiprocessing.Pool)和线程池(threadpool.ThreadPool)的区别与实例

    一般我们是通过动态创建子进程(或子线程)来实现并发服务器的,但是会存在这样一些缺点: 1.动态创建进程(或线程)比较耗费时间,这将导致较慢的服务器响应.  2.动态创建的子进程通常只用来为一个客户服务 ...

  7. windows 下进程池的操作

    在Windows上创建进程是一件很容易的事,但是在管理上就不那么方便了,主要体现在下面几个方面: 1. 各个进程的地址空间是独立的,想要在进程间共享资源比较麻烦 2. 进程间可能相互依赖,在进程间需要 ...

  8. python并发编程之多进程(三):共享数据&进程池

    一,共享数据 展望未来,基于消息传递的并发编程是大势所趋 即便是使用线程,推荐做法也是将程序设计为大量独立的线程集合 通过消息队列交换数据.这样极大地减少了对使用锁定和其他同步手段的需求, 还可以扩展 ...

  9. 线程池、进程池(concurrent.futures模块)和协程

    一.线程池 1.concurrent.futures模块 介绍 concurrent.futures模块提供了高度封装的异步调用接口 ThreadPoolExecutor:线程池,提供异步调用 Pro ...

随机推荐

  1. 成都Uber优步司机奖励政策(1月25日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  2. 2212: [Poi2011]Tree Rotations

    2212: [Poi2011]Tree Rotations https://www.lydsy.com/JudgeOnline/problem.php?id=2212 分析: 线段树合并. 首先对每个 ...

  3. vim中project多标签和多窗口的使用

    1.打开多个窗口 打开多个窗口的命令以下几个: 横向切割窗口 :new+窗口名(保存后就是文件名) :split+窗口名,也可以简写为:sp+窗口名 纵向切割窗口名 :vsplit+窗口名,也可以简写 ...

  4. oradebug 的学习 一

        说明 oradebug主要是给oracle支持人员使用的,尽管很早便有,但oracle官网很少有记载.他是个sql*plus命令行工具,有sysdba的权限就可以登入,无需特别设置.他可以被用 ...

  5. 使数据可供ArcGIS Server访问

    内容来自ESRI官方文档(点击访问),简单总结如下: 1 ArcGIS Server用于发布服务的数据必须存储在服务器可以访问的位置: 2 这样的位置有三种类型: 本地路径:将数据本地存储在每台 Ar ...

  6. 使用ListView+ObjectDataSource+DataPager实现增删改查加分页

    一.配置objectDataSource 选择业务逻辑层的类 二.配置Select对应的方法,必须是一个带两个整型参数的方法,第一个参数表示要查看的第一条记录的前一条30,第二个参数每页最多能显示的记 ...

  7. 关联分析FPGrowth算法在JavaWeb项目中的应用

    关联分析(关联挖掘)是指在交易数据.关系数据或其他信息载体中,查找存在于项目集合或对象集合之间的频繁模式.关联.相关性或因果结构.关联分析的一个典型例子是购物篮分析.通过发现顾客放入购物篮中不同商品之 ...

  8. (Python爬虫02) 制定爬虫的学习计划了

    公司清退是件很让人郁闷的事情,精,气,神 都会受到影响.焦虑的心态,涣散的眼神, 无所适从的若无其事,人周茶凉的快速交接,各种担忧....平静的面孔波涛汹涌的心.... 认识聊天中满满的套路...还有 ...

  9. leetcode-颜色分类

     颜色分类     给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示 ...

  10. 【20180807模拟测试】tree

    题目描述 或许会传送失败的传送门 #分析 考虑如何才能让白边显得更(不)重要,即在每条白边上(加上)减去一个值. 我们可以二分这个值,然后用寻常方法做最小生成树.统计在此最小生成树里有多少白 边. 然 ...