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. 【Maven】3.使用IntelliJ IDEA 使用本地搭建的maven私服,而不是使用默认的maven设置

    安装Idea的教程:http://www.cnblogs.com/sxdcgaq8080/p/7641379.html 搭建maven私服的教程:http://www.cnblogs.com/sxdc ...

  2. implement-stack-using-queues(easy,但也有思考价值)

    https://leetcode.com/problems/implement-stack-using-queues/ 还有种方法,就是利用同一个队列,知道队列长度前提下,把内容从头到尾,再向尾部依次 ...

  3. CentOS6.5环境配置笔记

    CentOS6.5环境配置笔记 一.概述 服务器系统重装,配置应用运行环境 CentOS6.5 x64 二.修改密码 重新设置登录密码 $passwd 或 $passwd root 三.配置端口号及防 ...

  4. VIM正则表达式查找替换

      0. 一些需要注意的不同 VIM中的正则表达式和其他的有点不一样 (1) 有些符号要用\转义,比如\+表示重复一次或以上,其他的还有一些,:h pattern查看(2) 非贪婪匹配用\{-}, 如 ...

  5. 浅谈PHP与手机APP开发即API接口开发

    API(Application Programming Interface,应用程序接口)架构,已经成为目前互联网产品开发中常见的软件架构模式,并且诞生很多专门API服务的公司,如:聚合数据(http ...

  6. vscode 折叠所有区域

  7. 利用MFC里面格式化函数也可以实现可变长度的问题

    直接粘代码: 1: CString str1;  //定义两个MFC里面的CString里面的字符串 2: CString str2; 3: str1.Format("(%d)", ...

  8. SharePoint 2013 和 SharePoint 2010 功能对比

    微软的网站找东西太麻烦了,在这记录一下. 从 SharePoint 2010 更改为 SharePoint 2013 http://technet.microsoft.com/zh-cn/librar ...

  9. LM339组成的双限比较器

    通常是上限电压值与电源电压Vcc接近,下限电压值靠近0V.

  10. vim 处理换行符

    1. 设置文件格式 :set fileformats=unix,dos 2. 查询当前文件格式 :set fileformat? 3. 转换文件格式 :set fileformat=dos 4. 设置 ...