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. django发送邮件配置

    配置如下,settings中配置: EMAIL_HOST = 'smtp.163.com' EMAIL_PORT = '25' EMAIL_HOST_USER = 'contact108@163.co ...

  2. Aliyun-CentOS7.3 Init

    Aliyun-CentOS7.3 Init 一.概述 查看系统版本 $ cat /etc/redhat-release $ uname -a 修改主机名 $ vi /etc/hostname $ re ...

  3. 雪习新知识:Java 内部类

    本文出自 http://blog.csdn.net/zhaizu/article/details/49176543,转载请注明出处. 嵌套类,内部类,静态内部类,静态嵌套类.匿名类,成员类,局部类,傻 ...

  4. CDH集群集成kafka

    搭建要求: 1.CDH环境已经搭建成功,在CDH上搭建kafka.要求用CDH上zookeeper管理kafka而不用kafka自带的zookeeper 2.kafka_2.11-0.8.2.1.tg ...

  5. widget 常用UI控件介绍

        一.单选框 单选框实例程序: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&q ...

  6. 使用 mybatis + flying + 双向相关建模 的电商后端

    代码地址如下:http://www.demodashi.com/demo/12468.html mybatis.flying 众所周知,mybatis 虽然易于上手,但放到互联网环境下使用时,不可避免 ...

  7. Android 虚化图片的方法

    Android 虚化图片 模糊图片 图片毛玻璃效果. 效果如图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaDNjNGxlbm92bw==/font/ ...

  8. oauth学习

    https://www.cnblogs.com/blowing00/p/4524132.html

  9. Github的基本功能:

    作者:Fadeoc Khaos链接:http://www.zhihu.com/question/20070065/answer/30521531来源:知乎著作权归作者所有,转载请联系作者获得授权. G ...

  10. [转]screen 的使用

    当我们使用securecrt,putty, 等连接远程服务器时,如果正在执行一个程序,比如shell 脚本,退出当前的窗口会导致程序终止!其原理如下: 根据POSIX.1定义: 1 挂断信号(SIGH ...