from concurrent.futures import ProcessPoolExecutor
import os,random
def func(name):
print("%s吃了又一碗饭:%s" %(name,os.getpid()))
time.sleep(random.randint(1, 3)) if __name__ == "__main__":
p = ProcessPoolExecutor(3) #创建一个进程池,里面容纳3个进程
for i in range(7):
obj = p.submit(func,'科比%i'%i)
print("主进程") #执行结果
主进程
科比0吃了又一碗饭:14860
科比1吃了又一碗饭:4872
科比2吃了又一碗饭:15088 科比3吃了又一碗饭:14860
科比4吃了又一碗饭:14860
科比5吃了又一碗饭:14860
科比6吃了又一碗饭:4872

再看下一个例子:

from concurrent.futures import ProcessPoolExecutor
import os,random
def func(name):
print("%s吃了又一碗饭:%s" %(name,os.getpid()))
time.sleep(random.randint(1, 3)) if __name__ == "__main__":
p = ProcessPoolExecutor(3) #创建一个进程池,里面容纳3个进程
for i in range(7):
obj = p.submit(func,'科比%i'%i)
p.shutdown(wait=True) #类似与join,并且可以关门,以防在等的过程中又提交新的任务
print("主进程") #执行结果
科比0吃了又一碗饭:13980
科比1吃了又一碗饭:9636
科比2吃了又一碗饭:12660
科比3吃了又一碗饭:13980
科比4吃了又一碗饭:12660
科比5吃了又一碗饭:9636
科比6吃了又一碗饭:13980
主进程

同步:执行之后等着结果

from multiprocessing import Process
import time,os,random
def func(name,hour):
print("A lifelong friend:%s,%s"% (name,os.getpid()))
time.sleep(hour)
print("Good bother:%s"%name)
start = time.time()
if __name__ == "__main__":
p = Process(target=func,args=('kebi',2))
p1 = Process(target=func,args=('maoxian',1))
p2 = Process(target=func,args=('xiaoniao',3))
p_1 = [p,p1,p2]
for i in p_1:
i.start() #提交之后原地等着,这就是串行
i.join()
print("this is over")
print(time.time() - start) #打印结果
A lifelong friend:kebi,13016
Good bother:kebi
A lifelong friend:maoxian,9124
Good bother:maoxian
A lifelong friend:xiaoniao,1552
Good bother:xiaoniao
this is over
6.487138032913208 #一个一个执行

串行是我们要避免的,这回浪费系统资源。

同步不代表串行,同步只是提交任务的方式。

from concurrent.futures import ProcessPoolExecutor
import os,random,time
def func(name,i):
print("%s吃了又一碗饭:%s" %(name,os.getpid()))
time.sleep(random.randint(1,3))
return i**2
obj_s = []
if __name__ == "__main__":
p = ProcessPoolExecutor(3) #创建一个进程池,里面容纳3个进程
for i in range(7):
obj = p.submit(func,'科比%i'%i,i)
obj_s.append(obj)
for m in obj_s:
print(m.result()) #执行结果
科比0吃了又一碗饭:3972
科比1吃了又一碗饭:12232
科比2吃了又一碗饭:204
科比3吃了又一碗饭:12232
科比4吃了又一碗饭:204
科比5吃了又一碗饭:3972 #先执行,最后取结果结果
0
1
4
科比6吃了又一碗饭:204
9
16
25
36

如果就像执行完了之后再打印结果

from concurrent.futures import ProcessPoolExecutor
import os,random,time
start = time.time()
def func(name,i):
print("%s吃了又一碗饭:%s" %(name,os.getpid()))
time.sleep(random.randint(1,3))
return i**2
obj_s = []
if __name__ == "__main__":
p = ProcessPoolExecutor(3) #创建一个进程池,里面容纳3个进程
for i in range(7):
obj = p.submit(func,'科比%i'%i,i)
obj_s.append(obj)
p.shutdown()
for m in obj_s:
print(m.result()) #执行结果
科比0吃了又一碗饭:16320
科比1吃了又一碗饭:12048
科比2吃了又一碗饭:1152
科比3吃了又一碗饭:16320
科比4吃了又一碗饭:12048
科比5吃了又一碗饭:1152
科比6吃了又一碗饭:16320
0
1
4
9
16
25
36

python——进程池的更多相关文章

  1. python进程池:multiprocessing.pool

    本文转至http://www.cnblogs.com/kaituorensheng/p/4465768.html,在其基础上进行了一些小小改动. 在利用Python进行系统管理的时候,特别是同时操作多 ...

  2. python(进程池/线程池)

    进程池 import multiprocessing import time def do_calculation(data): print(multiprocessing.current_proce ...

  3. python进程池剖析(三)

    之前文章对python中进程池的原理.数据流以及应用从代码角度做了简单的剖析,现在让我们回头看看标准库中对进程池的实现都有哪些值得我们学习的地方.我们知道,进程池内部由多个线程互相协作,向客户端提供可 ...

  4. python进程池剖析(二)

    之前文章中介绍了python中multiprocessing模块中自带的进程池Pool,并对进程池中的数据结构和各个线程之间的合作关系进行了简单分析,这节来看下客户端如何对向进程池分配任务,并获取结果 ...

  5. python进程池剖析(一)

    python中两个常用来处理进程的模块分别是subprocess和multiprocessing,其中subprocess通常用于执行外部程序,比如一些第三方应用程序,而不是Python程序.如果需要 ...

  6. 万里长征第一步:Python进程池的一点点小坑

    # -*- coding: utf- -*- """ Created on Thu Mar :: @author: lilide """ # ...

  7. python进程池

    当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百甚至上千个目标,手动的去创建进程的工作量巨大,此时就可以用到multiproce ...

  8. python 进程池的简单使用方法

    回到python,用一下python的进程池. 记得之前面试的时候,面试官问:你知道进程池的默认参数吗? 我没有回答上来,后来才知道,是有默认参数的.下面就看看它的默认参数 1. 不加参数 from ...

  9. python 进程池pool简单使用

    平常会经常用到多进程,可以用进程池pool来进行自动控制进程,下面介绍一下pool的简单使用. 需要主动是,在Windows上要想使用进程模块,就必须把有关进程的代码写if __name__ == ‘ ...

  10. python 进程池Pool以及Queue的用法

    import os,time,random from multiprocessing import Pool def task(name): print('正在运行的任务:%s,PID:(%s)'%( ...

随机推荐

  1. html中常用的标签小结

    内容详细标签: <h1>~<h6>标题标签<pre>格式化文本<u>下划线(underline)<i>斜体字(italics)<cit ...

  2. Scut游戏服务器引擎6.0.5.1发布

    1. 修正缓存删除时不会更新到Redis的问题 2. 修正Model组合3个以上子类时Change事件未绑定的问题 3. 修正中间层MySql与MsSql数据库Sql语句分页问题

  3. Android性能优化第(二)篇---Memory Monitor检测内存泄露

    上篇说了一些性能优化的理论部分,主要是回顾一下,有了理论,小平同志又讲了,实践是检验真理的唯一标准,对于内存泄露的问题,现在通过Android Studio自带工具Memory Monitor 检测出 ...

  4. DbVisualizer9.0.6破解版下载、破解方法以及补丁

    DbVisualizer破解方法如下:第一步:把下载的dbvis.puk文件,替换掉安装目录“D:\Program Files\DbVisualizer-6.0.12\lib”下dbvis.jar里面 ...

  5. 有趣的HTML5/CSS3艺术网站

    http://www.html5tricks.com/ 2017年8月31日08:16:21

  6. require.js 使用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. &和|不等同于&&或||

    &:位与 |:位或 &&:与 ||:或 当C编译器遇到这些符号时,会怎么样了? 当一个&或| 对位进行运算. 当二个&&或||对它进行与或运算. 千万不 ...

  8. TP框架模板中ifelse

    {if $_username}<ul class="afterLogin">    <li class="username"><a ...

  9. [技术讨论]关于前几天公布的京东bug上的问题分析

    1.  起因 前两天我公布了一个京东微信端截取到的三张图.并简单阐述了这三张图中的bug发现过程: 有朋友的评价是图中这种,可实际上.他应该是没有看出来这个bug代表的内容有多少.今天心血来潮决定具体 ...

  10. PHP实现上次登录功能

    通过一个sql语句把上次的登录时间给本次登录时间,再把当前时间记录下来 update userinfo  set lasttime=userinfo.logintime,logintime= CURR ...