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 相关文章推荐
python3使用urllib示例取googletranslate(谷歌翻译)
Jan 23 Python
Python数据类型详解(二)列表
May 08 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
Apr 21 Python
Python 实现两个列表里元素对应相乘的方法
Nov 14 Python
Python matplotlib的使用并自定义colormap的方法
Dec 13 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
Jan 22 Python
超简单的Python HTTP服务
Jul 22 Python
有关Tensorflow梯度下降常用的优化方法分享
Feb 04 Python
python 实现弹球游戏的示例代码
Nov 17 Python
python绘图模块之利用turtle画图
Feb 12 Python
python3操作redis实现List列表实例
Aug 04 Python
Python必备技巧之函数的使用详解
Apr 04 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常用函数小技巧
2008/09/11 PHP
Php Mssql操作简单封装支持存储过程
2009/12/11 PHP
php下使用strpos需要注意 === 运算符
2010/07/17 PHP
php微信公众号开发之快递查询
2018/10/20 PHP
yii2.0框架场景的简单使用示例
2020/01/25 PHP
js获取图片大小的函数代码
2011/09/20 Javascript
JS 实现获取打开一个界面中输入的值
2013/03/19 Javascript
Jquery图片延迟加载插件jquery.lazyload.js的使用方法
2014/05/21 Javascript
JS模拟键盘打字效果的方法
2015/08/05 Javascript
跟我学习javascript的undefined与null
2015/11/17 Javascript
基于javascript实现样式清新图片轮播特效
2016/03/30 Javascript
javascript闭包概念简单解析(推荐)
2016/06/03 Javascript
Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
2016/09/09 Javascript
javascript的函数劫持浅析
2016/09/26 Javascript
在vue中,v-for的索引index在html中的使用方法
2018/03/06 Javascript
微信小程序中weui用法解析
2019/10/21 Javascript
jQuery带控制按钮轮播图插件
2020/07/31 jQuery
Python标准库内置函数complex介绍
2014/11/25 Python
Python 爬虫的工具列表大全
2016/01/31 Python
老生常谈Python进阶之装饰器
2017/05/11 Python
python使用openpyxl库修改excel表格数据方法
2018/05/03 Python
python内置函数sorted()用法深入分析
2019/10/08 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
2020/01/10 Python
详解Python中的分支和循环结构
2020/02/11 Python
celery在python爬虫中定时操作实例讲解
2020/11/27 Python
利用CSS3制作简单的3d半透明立方体图片展示
2017/03/25 HTML / CSS
html5 迷宫游戏(碰撞检测)实例一
2013/07/25 HTML / CSS
html5的canvas元素使用方法介绍(画矩形、画折线、圆形)
2014/04/14 HTML / CSS
HTML5 通过Vedio标签实现视频循环播放的示例代码
2020/08/05 HTML / CSS
美国一家全面的在线零售鞋类公司:SHOEBACCA
2017/01/06 全球购物
加拿大专业美发产品购物网站:Chatters
2021/02/28 全球购物
工会趣味活动方案
2014/08/18 职场文书
小班上学期个人总结
2015/02/12 职场文书
MySQL pt-slave-restart工具的使用简介
2021/04/07 MySQL
HTML中的表单Form实现居中效果
2021/05/25 HTML / CSS
带你学习MySQL执行计划
2021/05/31 MySQL