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实现下载网易云音乐的高清MV
Mar 16 Python
Python中最常用的操作列表的几种方法归纳
Apr 24 Python
Python使用内置json模块解析json格式数据的方法
Jul 20 Python
Python使用pip安装pySerial串口通讯模块
Apr 20 Python
Ubuntu下使用python读取doc和docx文档的内容方法
May 08 Python
Python逐行读取文件中内容的简单方法
Feb 26 Python
处理python中多线程与多进程中的数据共享问题
Jul 28 Python
基于Python批量生成指定尺寸缩略图代码实例
Nov 20 Python
python自动化测试三部曲之unittest框架的实现
Oct 07 Python
Python Django路径配置实现过程解析
Nov 05 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
Feb 02 Python
python脚本框架webpy模板控制结构
Nov 20 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
一个php Mysql类 可以参考学习熟悉下
2009/06/21 PHP
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
2011/11/07 PHP
PHP使用适合阅读的格式显示文件大小的方法
2015/03/05 PHP
smarty模板引擎之配置文件数据和保留数据
2015/03/30 PHP
浅谈PHP中foreach/in_array的使用
2015/11/02 PHP
jquery.ui.draggable中文文档
2009/11/24 Javascript
iframe自适应宽度、高度 ie6 7 8,firefox 3.86下测试通过
2010/07/29 Javascript
如何让div span等元素能响应键盘事件操作指南
2012/11/13 Javascript
jQuery模拟点击A标记示例参考
2014/04/17 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
jQuery实现动画效果circle实例
2015/08/06 Javascript
javascript表单验证大全
2015/08/12 Javascript
js判断移动端是否安装某款app的多种方法
2015/12/18 Javascript
EasyUI中在表单提交之前进行验证
2016/07/19 Javascript
JS中使用mailto实现将用户在网页中输入的内容传递到本地邮件客户端
2016/10/08 Javascript
JavaScript在form表单中使用button按钮实现submit提交方法
2017/01/23 Javascript
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
在vue中安装使用vux的教程详解
2018/09/16 Javascript
Vue如何获取数据列表展示
2019/12/11 Javascript
Vue实现省市区三级联动
2020/12/27 Vue.js
[01:11:10]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG加赛
2014/05/26 DOTA
Python实现七彩蟒蛇绘制实例代码
2018/01/16 Python
python 将大文件切分为多个小文件的实例
2019/01/14 Python
python读写csv文件实例代码
2019/07/05 Python
cProfile Python性能分析工具使用详解
2019/07/22 Python
在python里使用await关键字来等另外一个协程的实例
2020/05/04 Python
详解Django配置JWT认证方式
2020/05/09 Python
python解包概念及实例
2021/02/17 Python
英国百安居装饰建材网上超市:B&Q
2016/09/13 全球购物
欧铁通票官方在线销售网站:Eurail.com
2017/10/14 全球购物
大学生个人简历中的自我评价
2013/12/27 职场文书
精神文明建设标语
2014/06/16 职场文书
语文教研活动总结
2014/07/02 职场文书
信仰观后感
2015/06/03 职场文书
小学见习报告
2015/06/23 职场文书
pandas中关于apply+lambda的应用
2022/02/28 Python