python高级编程——进程和进程池
python提供了一个跨平台的多进程支持——multiprocessing模块,其包含Process类来代表一个进程对象
1、Process语法结构:(注: 传参的时候一定使用关键字传参)
# 自定义进程类
class ProcessClass(Process):
g_num = 100 def __init__(self, interval):
# 这行代码必须添加上
super().__init__()
self.interval = interval
self.result = "初始化" def run(self):
global g_num
g_num = 120
print("子进程{},开始执行,父进程为{}".format(os.getpid(), os.getppid()))
start = time.time()
time.sleep(2)
stop = time.time()
print("{}执行结束,耗时{:0.2f}秒".format(os.getpid(), stop-start))
self.result = "运行之后的结果" if __name__ == "__main__":
t_start = time.time()
print("当前进程{}".format(os.getpid()))
p = ProcessClass(2)
p.start()
p.join()
t_stop = time.time()
# 数据隔离
print("子进程 任务 运行结果:", p.result) # -----> 初始化 数据未改变
print(ProcessClass.g_num) # ------>100 数据未改变
print("(%s)执行结束,耗时%0.2f" % (os.getpid(), t_stop - t_start))
实例如下:
# 自定义进程类
class ProcessClass(Process):
g_num = 100 def __init__(self, interval, q):
# 这行代码必须添加上
super().__init__()
self.interval = interval
self.result = "初始化"
# 初始化一个队列实例化对象
self.q = q def run(self):
global g_num
g_num = 120
print("子进程{},开始执行,父进程为{}".format(os.getpid(), os.getppid()))
start = time.time()
time.sleep(self.interval)
stop = time.time()
print("{}执行结束,耗时{:0.2f}秒".format(os.getpid(), stop-start))
self.result = "运行之后的结果"
# 将消息(数据)添加到队列中
self.q.put(g_num)
self.q.put(self.result) def get_data(self):
return self.result if __name__ == "__main__":
# 初始化一个队列实例化对象,参数为队列的长度
queues = Queue(5)
print("当前进程{}".format(os.getpid()))
p = ProcessClass(2, queues)
t_start = time.time()
p.start()
p.join()
t_stop = time.time()
# 数据隔离
print("子进程 任务 运行结果:", p.get_data()) # -----> 初始化 数据未改变
print(ProcessClass.g_num) # ------>100 数据未改变
print("子进程 任务 运行结果:", queues.get()) # -----> 120 数据未改变
print("子进程 任务 运行结果:", queues.get()) # -----> 运行之后的结果 数据未改变
print("(%s)执行结束,耗时%0.2f" % (os.getpid(), t_stop - t_start))
# 进程池
def worker(msg):
start = time.time()
print("{}开始执行,进程号为{}".format(msg, os.getpid()))
# random.random()生成0~1之间的随机数
time.sleep(random.random()*3)
# time.sleep(3)
stop = time.time()
print(msg, "执行完毕,耗时{:.2f}".format(stop-start)) if __name__ == "__main__":
# 定义一个进程池,最大数为3
po = Pool(3)
for i in range(10):
# 非阻塞式操作Pool.apply_async(要调用的目标,(传递给目标的参数元组,))
# 每次循环将会用空闲出来的子进程去调用目标
po.apply_async(worker, (i, ))
# 阻塞式操作
# po.apply(worker, (i, ))
print("start".center(24, "-"))
po.close()
po.join()
print("end".center(24, "-"))
python高级编程——进程和进程池的更多相关文章
- python高级编程——线程和线程池
线程模块 线程的特点: 本质上是异步的.需要多个并发活动.每个活动的处理顺序可能是不确定的.或者说是随机的,不可预测的,宏观上是同时运行的 ...
- 第十章:Python高级编程-多线程、多进程和线程池编程
第十章:Python高级编程-多线程.多进程和线程池编程 Python3高级核心技术97讲 笔记 目录 第十章:Python高级编程-多线程.多进程和线程池编程 10.1 Python中的GIL 10 ...
- (六) 一起学 Unix 环境高级编程 (APUE) 之 进程控制
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- (七) 一起学 Unix 环境高级编程(APUE) 之 进程关系 和 守护进程
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- python高级编程:有用的设计模式2
# -*- coding: utf-8 -*- __author__ = 'Administrator' #python高级编程:有用的设计模式 #代理 """ 代理对一 ...
- python高级编程:有用的设计模式1
# -*- coding: utf-8 -*-__author__ = 'Administrator'#python高级编程:有用的设计模式#设计械是可复用的,某种程序上它对软件设计中觉问题提供的语言 ...
- 第十一章:Python高级编程-协程和异步IO
第十一章:Python高级编程-协程和异步IO Python3高级核心技术97讲 笔记 目录 第十一章:Python高级编程-协程和异步IO 11.1 并发.并行.同步.异步.阻塞.非阻塞 11.2 ...
- python高级编程:有用的设计模式3
# -*- coding: utf-8 -*-__author__ = 'Administrator'#python高级编程:有用的设计模式#访问者:有助于将算法从数据结构中分离出来"&qu ...
- python高级编程技巧
由python高级编程处学习 http://blog.sina.com.cn/s/blog_a89e19440101fb28.html Python列表解析语法[]和生成 器()语法类似 [expr ...
随机推荐
- C# (转载)webbrowser专题(参考资料:https://www.cnblogs.com/blogpro/p/11458390.html)
C# .Net 2.0实例学习:WebBrowser页面与WinForm交互技巧 2 Study Case :高亮显示 上一个例子中我们学会了查找文本——究跟到底,对Web页面还是只读不写.那么,如果 ...
- Python爬虫基础面试题,为2020年初就业做准备
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:qiaoziheng 一.题目部分1.python中常用的数据结构有哪些 ...
- WebMvcConfigurationSupport 避坑指南
通过返回WebMvcConfigurationSupport 的方式, 默认会覆盖 Spring boot的自动配置, 导致配置失效静态资源无法访问:但是在WebMvcConfigurationadp ...
- Path Manipulation 路径操作
- 精通awk系列(12):awk getline用法详解
回到: Linux系列文章 Shell系列文章 Awk系列文章 getline用法详解 除了可以从标准输入或非选项型参数所指定的文件中读取数据,还可以使用getline从其它各种渠道获取需要处理的数据 ...
- Python高级特性——切片(Slice)
摘录廖雪峰网站 定义一个list: L = ['haha','xixi','hehe','heihei','gaga'] 取其前三个元素: >>> L[0],L[1],L[2] (' ...
- GitLab-怎样使用GitLab托管项目
场景 Docker Compose部署GitLab服务,搭建自己的代码托管平台(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/det ...
- iOS开发中全量日志的获取
我们在app中对崩溃.卡顿.内存问题进行监控.一旦监控到问题,我们就需要记录下来,但是,很多问题的定位仅靠问题发生的那一刹那记录的信息是不够的,我们需要记录app的全量日志来获取更多的信息. 一,使用 ...
- 基于C# 百度AI和科大汛飞语音合成SDK
一.百度语音合成 百度语音合成C# SDK主要是基于Rest API,需要互联网调用HTTP接口,Rest API 仅支持最多512个汉字,合成的格式文件为MP3,没有其它的格式.如果想离线使用需下载 ...
- Windows 10 神州网信版
一.版本介绍:官网链接:http://document.cmgos.com/release_notes/release_notes_V0_H 下载链接:请自行百度Windows 10 神州网信政府版( ...