1.通过multiprocessing.Process()类创建子进程

 import multiprocessing, time, os, random

 def work(index):
"""
任务
:param index:任务索引号
"""
start_time = time.time() # 取当前时间,以毫秒为单位,从1979年一月一号算起
# random.random() :random() -> x in the interval [0, 1)
time.sleep(random.random())
stop_time = time.time()
print("任务%d 执行时间%.2f 当前进程id = %d 当前进程的父进程为id= %d" % (index, stop_time - start_time, os.getpid(), os.getppid())) if __name__ == '__main__':
print("main - 当前进程id = %d" % os.getpid())
# 创建子进程方式1 通过multiprocessing.Process()类创建
for i in range(10):
p = multiprocessing.Process(target=work, args=(i,))
p.start()

结果如下: 可以看出完成10个任务创建了10个子进程,且这些子进程由主进程创建

2.使用进程池创建子进程

"""
进程池
1. multiprocessing.Pool()
2. apply_async(func[,args[,kwds]])
申请异步执行任务
- func:指向子进程要执行的函数
- args:向func指向的函数传递可变参数
- kwargs:向func指向的函数传递关键字参数
3. close() : 关闭进程池, 不再接收新的任务请求
4. terminate() :终止进程池中的子进程的任务执行
5. join(): 阻塞主进程,直到进程池中的所有子进程执行完毕,再解阻塞,必须在close或terminate之后使用;
"""
import multiprocessing, time, os, random def work(index):
"""
任务
:param index:任务索引号
"""
start_time = time.time() # 取当前时间,以毫秒为单位,从1979年一月一号算起
# random.random() :random() -> x in the interval [0, 1)
time.sleep(random.random())
stop_time = time.time()
print("任务%d 执行时间%.2f 当前进程id = %d 当前进程的父进程为id= %d" % (index, stop_time - start_time, os.getpid(), os.getppid())) if __name__ == '__main__':
print("main - 当前进程id = %d" % os.getpid())
# 创建进程池
"""通过进程池来创建子进程,再执行任务
processes=3: 设置进程池最大值(拥有进程最大数量)
缺省值: os.cpu_count() or 1 , 即cpu的数量作为进程池的最大值
"""
pool = multiprocessing.Pool(3)
for i in range(10):
pool.apply_async(func=work, args=(i,))

结果如下: 可以看出,完成10个任务,总共还是3个子进程,且这3个子进程也是有主进程创建

如果你和我有共同爱好,我们可以加个好友一起交流!

python编程系列---进程池的优越性体验的更多相关文章

  1. python中的进程池

    1.进程池的概念 python中,进程池内部会维护一个进程序列.当需要时,程序会去进程池中获取一个进程. 如果进程池序列中没有可供使用的进程,那么程序就会等待,直到进程池中有可用进程为止. 2.进程池 ...

  2. python中的进程池:multiprocessing.Pool()

    python中的进程池: 我们可以写出自己希望进程帮助我们完成的任务,然后把任务批量交给进程池 进程池帮助我们创建进程完成任务,不需要我们管理.进程池:利用multiprocessing 下的Pool ...

  3. Python中的进程池与线程池(包含代码)

    Python中的进程池与线程池 引入进程池与线程池 使用ProcessPoolExecutor进程池,使用ThreadPoolExecutor 使用shutdown 使用submit同步调用 使用su ...

  4. python并发编程之进程池,线程池,协程

    需要注意一下不能无限的开进程,不能无限的开线程最常用的就是开进程池,开线程池.其中回调函数非常重要回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去自己加 ...

  5. python并发编程之进程池,线程池concurrent.futures

    进程池与线程池 在刚开始学多进程或多线程时,我们迫不及待地基于多进程或多线程实现并发的套接字通信,然而这种实现方式的致命缺陷是:服务的开启的进程数或线程数都会随着并发的客户端数目地增多而增多, 这会对 ...

  6. Python并发编程之进程池与线程池

    一.进程池与线程池 python标准模块concurrent.futures(并发未来) 1.concurrent.futures模块是用来创建并行的任务,提供了更高级别的接口,为了异步执行调用 2. ...

  7. python并发编程之进程池、线程池、协程

    需要注意一下不能无限的开进程,不能无限的开线程最常用的就是开进程池,开线程池.其中回调函数非常重要回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去自己加 ...

  8. Python网络编程(进程池、进程间的通信)

    线程池的原理:        线程池是预先创建线程的一种技术.线程池在还没有任务到来之前,        创建一定数量的线程,放入空闲队列中.这些线程都是处于睡眠状态,        即均为启动,不消 ...

  9. python 之 并发编程(进程池与线程池、同步异步阻塞非阻塞、线程queue)

    9.11 进程池与线程池 池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务 池子内什么时候装进程:并发的任务属于计算密集型 池子内什么时候装线程:并发的任务属于I ...

随机推荐

  1. spring中ehcache的配置和使用方法

    继续上篇,这篇介绍服务层缓存,ehcache一般的配置和用法 一.添加jar包引用 修改pom.xml文件,加入: <dependency> <groupId>org.spri ...

  2. AtCoder从小白到大神的进阶攻略

    前言 现在全球最大的编程比赛记分网站非CodeForces和AtCoder莫属了,@ezoixx130大佬已经在去年介绍过CodeForces了(传送门),那么现在我们主要谈一下AtCoder. 简介 ...

  3. Mysql高手系列 - 第13篇:细说NULL导致的神坑,让人防不胜防

    这是Mysql系列第13篇. 环境:mysql5.7.25,cmd命令中进行演示. 当数据的值为NULL的时候,可能出现各种意想不到的效果,让人防不胜防,我们来看看NULL导致的各种神坑,如何避免? ...

  4. HashMap浅析

    一.概述 HashMap,基于哈希结构的Map接口的一个实现,无序,允许null键值对,线程不安全的.可以使用集合工具类Collections中的synchronizedMap方法,去创建一个线程安全 ...

  5. LeetCode 430. Faltten a Multilevel Doubly Linked List

    题目链接:LeetCode 430. Faltten a Multilevel Doubly Linked List class Node { public: int val = NULL; Node ...

  6. 【Django】ModelForm

    ModelForm 1.Model与Form内容回顾 Model - 数据库操作 - 验证 class A(MOdel): user = email = pwd = Form - class Logi ...

  7. opencv边缘检测-拉普拉斯算子

    sobel算子一文说了,索贝尔算子是模拟一阶求导,导数越大的地方说明变换越剧烈,越有可能是边缘. 那如果继续对f'(t)求导呢? 可以发现"边缘处"的二阶导数=0. 我们可以利用这 ...

  8. 从壹开始 [Admin] 之五 ║ 实现『按钮』级别权限配置

    一.前情回顾 哈喽大家好,在这个欢庆的日子里,老张祝大家工作都能蒸蒸日上!今天正好也是社团成立的第一天,我也是希望今天能是个纪念日,沾沾这个大喜庆! 放假这两天,倒是学到了很多东西,我这个也是承认的, ...

  9. html实现打印预览效果

    前面说到利用lodop插件进行打印设置,那个应用于打印快递面单,或者跟快递面单相似场景的情况. 今天的利用html快速打印出A4纸大小的场景,例如:合同.静态文本等. 效果如下: 方式一 1.设置di ...

  10. Java8新特性——接口默认方法

    Java 8 新增了接口的默认方法. 简单说,默认方法就是接口可以有实现方法,而且不需要实现类去实现其方法. 我们只需在方法名前面加个default关键字即可实现默认方法. 为什么要有这个特性? 首先 ...