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. Context都没弄明白,还怎么做Android开发?

    Activity mActivity =new Activity() 作为Android开发者,不知道你有没有思考过这个问题,Activity可以new吗?Android的应用程序开发采用JAVA语言 ...

  2. python super 的正确理解

    http://www.jb51.net/article/87807.htm super指的是MRO中的下一个类

  3. 【唯星宠物】——BootStrap/Mysql/PHP/Ajax爬坑之正则验证登录注册子页

    前言:唯星宠物产品官网的登录注册,单独一个子页,页面使用BootStrap实现响应式,PHP提供服务端,利用Ajax技术,从Mysql中获取JSON数据,并对表单信息进行正则验证.项目github地址 ...

  4. iOS后台解析

    iOS后台 上个月给小妹买了一台6s 她问我双击 Home 键之后 弹出的那些应用会不会耗电 我找到一篇文章 正好说的就是这个问题 摘要翻译一下 原文地址 http://www.speirs.org/ ...

  5. 性能测试脚本开发(C&C#&Java)

    一.C语言实现及相关问题解决 LR:C函数-功能描述 LR:C函数-适用范围 LR:C函数-头信息传递 LR:C函数-字符串编码转换 lr_convert_string_encoding(" ...

  6. mysql 时间函数date_format

    http://toptree.iteye.com/blog/812642今天,在开发邮件系统的时候发现有很多的邮件没有发送成功,想手动把数据修改.找了mysql 的日期函数 获得的pubtime为St ...

  7. Java使用笔记之stream和sorted使用

    //对象类型stream排序List<User> users = new ArrayList<User>(){ { add(new User("a", &q ...

  8. C# 字节数组拼接的速度实验(Array.copy(),Buffer.BlockCopy(),Contact())

    无聊做了如题的一个算法的优劣性能比较,由于很多人都只关心结果,那么我先贴出结果如下: 由于我的测试数据量比较小,只能得出Array.Copy()和Buffer.BlockCopy()方法性能要好于Co ...

  9. Struts2学习四----------动态方法调用

    © 版权声明:本文为博主原创文章,转载请注明出处 Struts2动态方法调用 - 默认:默认执行方法中的execute方法,若指定类中没有该方法,默认返回success <package nam ...

  10. unbuntu16.04上python开发环境搭建建议

    unbuntu16.04上python开发环境搭建建议  2017-12-20  10:39:27 推荐列表: pycharm: 可以自行破解,但是不推荐,另外也不稳定 pydev+eclipse: ...