python-- 进程的 join 方法和 is_alive 方法

简介: python-- 进程的 join 方法和 is_alive 方法

join 方法


开启一个正常的子进程,父进程会等待子进程结束后,父进程(程序)才结束。join()是让主进程等待子进程执行完。 现象:主进程执行到这句话,主进程阻塞住,等待子进程执行

如何把父进程和子进程之间的关系变为同步或者异步?父进程执行join,就会变成同步,不执行join,父进程和子进程就是异步的关系

join必须放在start()后边

没有join

from multiprocessing import Process
from time import sleep
def func():
    sleep(6)
    print('这是儿子。。。')
if __name__ == '__main__':
    p = Process(target=func)
    p.start()
    sleep(5)
    print('这是老子。。。')

结果:

这是老子。。。
这是儿子。。。

等5s执行这是老子。。。,在等1s执行这是儿子。。。

有join

from multiprocessing import Process
from time import sleep
def func():
    sleep(6)
    print('这是儿子。。。')
if __name__ == '__main__':
    p = Process(target=func)
    p.start()
    p.join()  # 等待子进程执行完在往下执行
    sleep(5)
    print('这是老子。。。')

结果:

这是儿子。。。
这是老子。。。

等6s执行这是儿子。。。,在等5s执行这是老子。。。


is_alive 方法


返回一个bool值,如果返回True,代表进程还活着,如果返回False,代表子进程死了

p.is_alive() 判断p进程是否还活着

p.terminate() 杀死p进程

from multiprocessing import Process
import time
def func():
    time.sleep(1)
    print(123)
if __name__ == '__main__':
    p = Process(target=func, )
    p.start()
    p.terminate()  # 杀死p进程,让解释器告诉操作系统,请杀掉p进程。
    print('子进程是否还活着?', p.is_alive())
    time.sleep(0.002)
    print('子进程是否还活着?', p.is_alive())

结果:

子进程是否还活着? True
子进程是否还活着? False
from multiprocessing import Process
import time
def func():
    time.sleep(1)
    print('子进程')
if __name__ == '__main__':
    p = Process(target=func, )
    p.start()  # p.is_alive()放在start前面都是false,因为还没启动
    print(p.is_alive())
    p.join()
    print(p.is_alive())  # 子进程已经运行结束了
    print('主进程结束了')

结果:

True
子进程
False
主进程结束了

相关文章
|
1天前
|
机器学习/深度学习 数据可视化 前端开发
【Python机器学习专栏】机器学习模型评估的实用方法
【4月更文挑战第30天】本文介绍了机器学习模型评估的关键方法,包括评估指标(如准确率、精确率、召回率、F1分数、MSE、RMSE、MAE及ROC曲线)和交叉验证技术(如K折交叉验证、留一交叉验证、自助法)。混淆矩阵提供了一种可视化分类模型性能的方式,而Python的scikit-learn库则方便实现这些评估。选择适合的指标和验证方法能有效优化模型性能。
|
1天前
|
机器学习/深度学习 算法 Python
【Python机器学习专栏】Python中的特征选择方法
【4月更文挑战第30天】本文介绍了机器学习中特征选择的重要性,包括提高模型性能、减少计算成本和增强可解释性。特征选择方法主要包括过滤法(如相关系数、卡方检验和互信息)、包装法(如递归特征消除和顺序特征选择)和嵌入法(如L1正则化和决策树)。在Python中,可利用`sklearn`库的`feature_selection`模块实现这些方法。通过有效的特征选择,能构建更优的模型并深入理解数据。
|
1天前
|
机器学习/深度学习 数据采集 数据可视化
【Python 机器学习专栏】数据缺失值处理与插补方法
【4月更文挑战第30天】本文探讨了Python中处理数据缺失值的方法。缺失值影响数据分析和模型训练,可能导致模型偏差、准确性降低和干扰分析。检测缺失值可使用Pandas的`isnull()`和`notnull()`,或通过可视化。处理方法包括删除含缺失值的行/列及填充:固定值、均值/中位数、众数或最近邻。Scikit-learn提供了SimpleImputer和IterativeImputer类进行插补。选择方法要考虑数据特点、缺失值比例和模型需求。注意过度插补和验证评估。处理缺失值是提升数据质量和模型准确性关键步骤。
|
2天前
|
API 数据库 Python
Python web框架fastapi数据库操作ORM(二)增删改查逻辑实现方法
Python web框架fastapi数据库操作ORM(二)增删改查逻辑实现方法
|
2天前
|
机器学习/深度学习 数据可视化 数据挖掘
实用技巧:提高 Python 编程效率的五个方法
本文介绍了五个提高 Python 编程效率的实用技巧,包括使用虚拟环境管理依赖、掌握列表推导式、使用生成器提升性能、利用装饰器简化代码结构以及使用 Jupyter Notebook 进行交互式开发。通过掌握这些技巧,可以让你的 Python 编程更加高效。
|
2天前
|
数据可视化 数据处理 Python
Python有很多创建图表的常用方法
Python的图表创建工具有多种,如基础的Matplotlib用于绘制各类图表,包括线图和柱状图等;Seaborn是Matplotlib的扩展,擅长复杂可视化如热力图和回归图;Plotly和Bokeh提供交互式图表,适合高维数据展示,支持散点图、线图等;Pandas虽主要是数据处理库,但也具备基本绘图功能;Pygal专注于生成可缩放矢量图,如线图和饼图,支持SVG输出;而Altair基于Vega,适用于交互式和高维数据的可视化。选择哪种库取决于具体需求和图表类型。
12 2
|
3天前
|
消息中间件 Linux 调度
Python的进程锁,进程队列
Python的进程锁,进程队列
118 3
|
3天前
|
数据采集 监控 调度
Python的进程,以及进程同步,守护进程详细解读
Python的进程,以及进程同步,守护进程详细解读
133 4
|
7天前
|
运维 Shell Python
第九章 Python自定义模块及导入方法
第九章 Python自定义模块及导入方法
|
7天前
|
Java 数据库连接 数据处理
Python从入门到精通:3.1.2多线程与多进程编程
Python从入门到精通:3.1.2多线程与多进程编程