python 多线程中join()的作用


Posted in Python onOctober 29, 2020

一 前言

温习python 多进程语法的时候,对 join的理解不是很透彻,本文通过代码实践来加深对 join()的认识。

multiprocessing 是python提供的跨平台版本的多进程模块。multiprocessing可以充分利用多核,提升程序运行效率。multiprocessing支持子进程,通信和共享数据,执行不同形式的同步,提供了Process、Queue、Pipe、Lock等组件。不过今天重点了解 join。后续文章会逐步学习介绍其他组件或者功能。

二 动手实践

join()方法可以在当前位置阻塞主进程,带执行join()的进程结束后再继续执行主进程的代码逻辑。

# encoding: utf-8
"""
author: yangyi@youzan.com
time: 2019/7/30 11:20 AM
func:
"""

from multiprocessing import Process
import os
import time

def now():
  return str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))


def func_1(name):
  print(now() + ' Run child process %s (%s)...' % (name, os.getpid()))
  time.sleep(4)
  print(now() + ' Stop child process %s (%s)...\n' % (name, os.getpid()))


def func_2(name):
  print(now() + ' Run child process %s (%s)...' % (name, os.getpid()))
  time.sleep(8)
  print(now() + ' hello world!')
  print(now() + ' Stop child process %s (%s)...\n' % (name, os.getpid()))


if __name__ == '__main__':
  print ('Parent process %s.' % os.getpid())
  p1 = Process(target=func_1, args=('func_1',))
  p2 = Process(target=func_2, args=('func_2',))
  print now() + ' Process start.'
  p1.start()
  p2.start()
  p1.join()
  p2.join()
  print now() + ' Process end .'

输出结果

python 多线程中join()的作用

结果显示

主进程的 Process end .是在func1 和func2 结束之后才打印出来的。

2.2 去掉 join() 函数

if __name__ == '__main__':
  print ('Parent process %s.' % os.getpid())
  p1 = Process(target=func_1, args=('func_1',))
  p2 = Process(target=func_2, args=('func_2',))
  print now() + ' Process start.'
  p1.start()
  p2.start()
  print now() + ' Process end .'

结果如下:

python 多线程中join()的作用

2.3 去掉func_2 的 join()

if __name__ == '__main__':
  print ('Parent process %s.' % os.getpid())
  p1 = Process(target=func_1, args=('func_1',))
  p2 = Process(target=func_2, args=('func_2',))
  print now() + ' Process start.'
  p1.start()
  p2.start()
  p1.join() ### 在p1 执行完之后 。不等待p2 执行,主进程结束。
  print now() + ' Process end .'

结果如下:

python 多线程中join()的作用

结果显示主线程 "Process end"在func_1 执行结束之后输出而没有等待func_2 执行完毕。

2.4 小结

利用多线程时,一般都先让子线程调用start() ,然后再去调用join(),让主进程等待子进程结束才继续走后续的逻辑。

思考题

能不能每个子进程调用start() 之后,然后直接调用join() 类似:

p1.start()p1.join()p2.start()p2.join()

以上就是python 多线程中join()的作用的详细内容,更多关于python 多线程join()的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python with的用法
Aug 22 Python
理解Python中函数的参数
Apr 27 Python
在Python程序中操作文件之isatty()方法的使用教程
May 24 Python
Python中用psycopg2模块操作PostgreSQL方法
Nov 28 Python
Python图像处理之颜色的定义与使用分析
Jan 03 Python
局域网内python socket实现windows与linux间的消息传送
Apr 19 Python
linux下安装python3和对应的pip环境教程详解
Jul 01 Python
Python+opencv+pyaudio实现带声音屏幕录制
Dec 23 Python
python实现多进程按序号批量修改文件名的方法示例
Dec 30 Python
python爬虫基础知识点整理
Jun 02 Python
Python能做什么
Jun 02 Python
python使用QQ邮箱实现自动发送邮件
Jun 22 Python
pycharm2020.1.2永久破解激活教程,实测有效
Oct 29 #Python
python 实现音频叠加的示例
Oct 29 #Python
详解python的super()的作用和原理
Oct 29 #Python
Python生成pdf目录书签的实例方法
Oct 29 #Python
利用python清除移动硬盘中的临时文件
Oct 28 #Python
python实现一个简单RPC框架的示例
Oct 28 #Python
pycharm永久激活超详细教程
Oct 29 #Python
You might like
全国FM电台频率大全 - 29 青海省
2020/03/11 无线电
php中实现记住密码自动登录的代码
2011/03/02 PHP
PHP命名空间(Namespace)的使用详解
2013/05/04 PHP
PHP常见的6个错误提示及解决方法
2016/07/07 PHP
Yii2中关联查询简单用法示例
2016/08/10 PHP
php和js实现根据子网掩码和ip计算子网功能示例
2019/11/09 PHP
Js的MessageBox
2006/12/03 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
jQuery实现指定区域外单击关闭指定层的方法【经典】
2016/06/22 Javascript
JavaScript制作简单分页插件
2016/09/11 Javascript
H5移动端适配 Flexible方案
2016/10/24 Javascript
深入理解JavaScript的async/await
2018/08/05 Javascript
vue中利用simplemde实现markdown编辑器(增加图片上传功能)
2019/04/29 Javascript
[06:23]2014DOTA2西雅图国际邀请赛 小组赛7月12日TOPPLAY
2014/07/12 DOTA
[01:21]辉夜杯战队访谈宣传片—CDEC
2015/12/25 DOTA
[44:15]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第二局
2016/03/06 DOTA
[05:31]干嘛呢兄弟!DOTA2 TI9语音轮盘部分出处
2019/05/14 DOTA
[46:38]完美世界DOTA2联赛PWL S2 Magma vs PXG 第三场 11.28
2020/12/02 DOTA
Python 序列的方法总结
2016/10/18 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
2019/03/27 Python
Flask框架学习笔记之消息提示与异常处理操作详解
2019/08/15 Python
python基于celery实现异步任务周期任务定时任务
2019/12/30 Python
水果花束:Fruit Bouquets
2017/12/20 全球购物
简单的大学生自我鉴定
2014/02/18 职场文书
外贸采购员岗位职责
2014/03/08 职场文书
现金出纳岗位职责
2014/03/15 职场文书
卖房协议书
2014/04/11 职场文书
10的分与合教学反思
2014/04/30 职场文书
孝老爱亲模范事迹材料
2014/05/25 职场文书
法人单位授权委托书范文
2014/10/06 职场文书
化工见习报告范文
2014/10/31 职场文书
2014年库房工作总结
2014/11/26 职场文书
亲属关系公证书样本
2015/01/23 职场文书
公司转让协议书
2016/03/19 职场文书
Python学习之迭代器详解
2022/04/01 Python
JavaScript设计模式之原型模式详情
2022/06/21 Javascript