Python连载37-多进程、进程子类、进程父子id
一、线程替代方案
1.subprocess
(1)完全跳过线程,使用进程
(2)是派生进程的主要替代方案
(3)python2.4后引入
2.multiprocessing
(1)使用threading接口派生,使用子进程
(2)允许为多核或者多CPU派生进程,接口很threading非常相似
(3)python2.6
3.concurrent.futures
(1)新的异步执行模块
(2)人物级别的操作
(3)python3.2之后引入
4.多进程
(1)进程间通讯(InterprocessCommunication,IPC)
(2)进程之间无任何共享状态
(3)进程的创建
i.直接生成Process实例对象,举例
import multiprocessing
from time import sleep,ctime
def clock(interval):
while True:
print("The time is %s" % ctime())
sleep(interval)
if __name__ == "__main__":
p = multiprocessing.Process(target= clock,args=(2,))
p.start()
#从运行就可以看出来主进程已经结束了,但是子线程仍然在运行着
#和我们之前讲的线程,有一个最大区别就是线程在主进程里面,主进程结束了,子线程就结束了
#子线程从属于进程,子进程与进程之间是并列关系
#这里的程序停止,是我手动停止的

ii.派生子类
举例:重写子类,和我们之前讲的线程的差不多,这里民重写了最重要的两个函数,一个是初始化子类,继承父类的初始化,第二个就是运行函数
class ClockProcess(multiprocessing.Process):
def __init__(self,interval):
super().__init__()
self.interval = interval
def run(self):
while True:
print("The time is {0}".format(ctime()))
sleep(self.interval)
if __name__ == "__main__":
p2 = ClockProcess(2)
p2.start()

iii.在os中查看pid,ppid以及他们的关系
def info(title):
print(title)
print("module name:",__name__)
#得到父进程的id
print("parent process:",os.getppid())
#得到本身进程的id
print("process id:",os.getpid())
def f(name):
info("function f")
print("hello",name)
if __name__ == "__main__":
info("main line")
print("==================================")
p = multiprocessing.Process(target=f,args=("bob",))
p.start()
p.join()
解释:先调用了一个函数,然后又调用了一个嵌套函数的函数

四、源码
d26_1_multiprocess_exercise.py
https://github.com/ruigege66/Python_learning/blob/master/d26_1_multiprocess_exercise.py
2.CSDN:https://blog.csdn.net/weixin_44630050(心悦君兮君不知-睿)
3.博客园:https://www.cnblogs.com/ruigege0000/
4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

Python连载37-多进程、进程子类、进程父子id的更多相关文章
- Python多进程库multiprocessing创建进程以及进程池Pool类的使用
问题起因最近要将一个文本分割成好几个topic,每个topic设计一个regressor,各regressor是相互独立的,最后汇总所有topic的regressor得到总得预测结果.没错!类似bag ...
- Python 多进程编程之 进程间的通信(在Pool中Queue)
Python 多进程编程之 进程间的通信(在Pool中Queue) 1,在进程池中进程间的通信,原理与普通进程之间一样,只是引用的方法不同,python对进程池通信有专用的方法 在Manager()中 ...
- Python 多进程编程之 进程间的通信(Queue)
Python 多进程编程之 进程间的通信(Queue) 1,进程间通信Process有时是需要通信的,操作系统提供了很多机制来实现进程之间的通信,而Queue就是其中的一个方法----这是操作系统开辟 ...
- Python 多线程、多进程 (三)之 线程进程对比、多进程
Python 多线程.多进程 (一)之 源码执行流程.GIL Python 多线程.多进程 (二)之 多线程.同步.通信 Python 多线程.多进程 (三)之 线程进程对比.多线程 一.多线程与多进 ...
- python学习笔记—— 多进程中的 孤儿进程和僵尸进程
1 基本概述 1.1 孤儿进程和僵尸进程 父进程创建子进程后,较为理想状态是子进程结束,父进程回收子进程并释放子进程占有的资源:而实际上,父子进程是异步过程,两者谁先结束是无顺的,一般可以通过父进程调 ...
- Python进阶(4)_进程与线程 (python并发编程之多进程)
一.python并发编程之多进程 1.1 multiprocessing模块介绍 由于GIL的存在,python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大 ...
- Python 3 并发编程多进程之守护进程
Python 3 并发编程多进程之守护进程 主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemo ...
- python 并发编程 多进程 守护进程
一 守护进程 主进程创建子进程目的是:主进程有一个任务需要并发执行,那开启子进程帮我并发执行任务 主进程创建子进程,然后将该进程设置成守护自己的进程 关于守护进程需要强调两点: 其一:守护进程会在主进 ...
- python 自动化之路 day 09 进程、线程、协程篇
本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者 ...
- python进程、进程池(二)代码部分
第一种创建进程的方式: from multiprocessing import Process def f(name): print(name,"在子进程") if __name_ ...
随机推荐
- 【Java笔记】【Java核心技术卷1】chapter3 D4变量
package chapter3; public class D4变量 { public static final int BBB=100; //类常量 public static void main ...
- JNDI----数据连接池
JNDI:提供了查找和访问各种命名和目录服务的通用,统一的接口 常用的配置属性: name:表示以后要查找的名称.通过此名称可以找到DataSource,此名称任意更换,但是程序中最终要查找的就是 ...
- mybatis学习笔记(二)
三种查询方式,由<resultType 属性控制> 第一种 selectList() 返回值为LIst List<People> selectList = session.se ...
- Vue系列:Websocket 使用配置
WebSocket 是什么? WebSocket 是一种网络通信协议.而且是在 HTML5 才开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. 为什么需要 WebSocket ? 了解计算 ...
- (二十七)c#Winform自定义控件-多输入窗体
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...
- mysql row size上限
mysql innodb 的 row size上限 背景 在项目使用中,出现了以下报错: Error Code: 1118 - Row size too large (> 8126). Chan ...
- 并发模型与IO模型梳理
并发模型 常见的并发模型一般包括3类,基于线程与锁的内存共享模型,actor模型和CSP模型,其中尤以线程与锁的共享内存模型最为常见.由于go语言的兴起,CSP模型也越来越受关注.基于锁的共享内存模型 ...
- R 实用命令 1
Quit and restart a clean R session from within R? If you're in RStudio: command/ctrl + shift + F10 . ...
- python 编码报错问题 'ascii' codec can't encode characters 解决方法
python在安装时,默认的编码是ascii, 当程序中出现非ascii编码时,python的处理常常会报这样的错 'ascii' codec can't encode characters pyth ...
- 类spring ioc 泛型保留
类spring ioc 泛型保留 什么是泛型擦除 Java并不会传递泛型类,举个直观的栗子: @Component public class BaseProvider<T> { publi ...