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优步司机奖励政策(3月28日)

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

  2. 北京Uber优步司机奖励政策(2月27日)

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

  3. docker 在window 10 专业版的安装 && .net core 在docker的部署

    1.如果无法安装Hyper-V,八成是自己的杀毒软件给关了,我的是 电脑管家-启动项里面 给关掉了. 2.如果部署.net core 后 运行 报 An assembly specified in t ...

  4. Python3 之选课系统

    项目介绍:项目名称:(oldboy选课系统)项目功能: 分为 学员视角, 老师视角 , 管理员视角 学员视角{ (注册 登录 个人中心 选课 学习 上课) 登录 就是登录 注册: 填写 资料 信息 完 ...

  5. 能用程序解决的问题绝不BB之租房篇章...

    项目缘起于高德API+Python解决租房问题, 修修补补之后上线了58公寓高德搜房(全国版)http://woyaozufang.live:8080. 经过了多次代码优化.内容改版.新增房源等... ...

  6. 14、Java并发编程:CountDownLatch、CyclicBarrier和Semaphore

    Java并发编程:CountDownLatch.CyclicBarrier和Semaphore 在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch ...

  7. mysql int类型的长度值

    整数类型的存储和范围(来自mysql手册) 类型 字节 最小值 最大值     (带符号的/无符号的) (带符号的/无符号的) TINYINT 1 -128 127     0 255 SMALLIN ...

  8. 多台服务器下同步文件夹数据(rsync+inotify)

    网上有很多讲解rsync+inotify的教程,我就先贴出一个来大家去看吧,基本都是类似的. http://www.jb51.net/article/57011.htm 我就强调几点,按照上面的方法配 ...

  9. python学习笔记03 --------------程序交互与格式化输出

    1.读取用户输入内容 语法:input() 例: name = input('你的名字是?) print('你好'+name) 程序会等待用户输入名字后打印:你好(用户输入的名字) 注意:input接 ...

  10. lintcode 二叉树中序遍历

    /** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * Tr ...