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. 实现页面切换(动画效果实现,不用ViewPager)

    源代码地址 http://download.csdn.net/detail/u013210620/8791687 先看主页面布局activity_main <?xml version=" ...

  2. win下配置java环境变量

    系统变量→新建 JAVA_HOME 变量 . 变量值填写jdk的安装目录(本人是 E:\Java\jdk1.7.0)  系统变量→寻找 Path 变量→编辑 在变量值最后输入 %JAVA_HOME%\ ...

  3. vue2.X 自定义 模态框 modal

    1.自定义 modal Modal.vue <!-- 模态框 --> <template> <div class="modal-mask" v-sho ...

  4. storm笔记:Storm+Kafka简单应用

    storm笔记:Storm+Kafka简单应用 这几天工作须要使用storm+kafka,基本场景是应用出现错误,发送日志到kafka的某个topic.storm订阅该topic.然后进行兴许处理.场 ...

  5. Oracle 修改字段注释

    修改字段注释SQL: COMMENT ON COLUMN 表名.字段名 IS '注释内容';             批量修改所有表的字段注释,这里是修改所有没有注释的字段   附件:   实现步骤: ...

  6. VueJS字符串反转:String.reverse()

    HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <titl ...

  7. Android中读取图片EXIF元数据之metadata-extractor的使用

    一.引言及介绍 近期在开发中用到了metadata-extractor-xxx.jar 和 xmpcore-xxx.jar这个玩意, 索性查阅大量文章了解学习,来分享分享. 本身工作也是常常和处理大图 ...

  8. Windows 命令集合

    查看端口占用 查看8080端口使用情况: C:\>netstat -aon|findstr "8080" 结果:TCP    0.0.0.0:8080           0 ...

  9. Linux U盘只读解决方法

    Linux Fat的U盘只读,这个问题经常出现,原因大家都说了是U盘的错误,出现这种情况后,一般的解决方案是 mount | grep <U盘的标签> # 找到你的U盘的对应的设备名称,如 ...

  10. golang截取字符串

    对于字符串操作,截取字符串是一个常用的, 而当你需要截取字符串中的一部分时,可以使用像截取数组某部分那样来操作,示例代码如下: package main import "fmt" ...