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编程实战之Oracle数据库操作示例
Jun 21 Python
浅谈flask截获所有访问及before/after_request修饰器
Jan 18 Python
python实现数据库跨服务器迁移
Apr 12 Python
python中实现字符串翻转的方法
Jul 11 Python
Python爬虫常用库的安装及其环境配置
Sep 19 Python
win10系统下Anaconda3安装配置方法图文教程
Sep 19 Python
Python数据分析:手把手教你用Pandas生成可视化图表的教程
Dec 15 Python
python在openstreetmap地图上绘制路线图的实现
Jul 11 Python
pycharm内无法import已安装的模块问题解决
Feb 12 Python
python的reverse函数翻转结果为None的问题
May 11 Python
使用keras和tensorflow保存为可部署的pb格式
May 25 Python
详解KMP算法以及python如何实现
Sep 18 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 函数call_user_func和call_user_func_array用法详解
2014/03/02 PHP
php强制运行广告的方法
2014/12/01 PHP
YII Framework框架教程之安全方案详解
2016/03/14 PHP
Laravel实现构造函数自动依赖注入的方法
2016/03/16 PHP
浅谈PHP中关于foreach使用引用变量的坑
2016/11/14 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
2019/10/18 PHP
在JavaScript中获取请求的URL参数[正则]
2010/12/25 Javascript
借助JavaScript脚本判断浏览器Flash Player信息的方法
2014/07/09 Javascript
JS+CSS实现仿新浪微博搜索框的方法
2015/02/24 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
2015/03/25 Javascript
图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
2020/12/13 Javascript
js修改onclick动作的四种方法(推荐)
2016/08/18 Javascript
Javascript 跨域知识详细介绍
2016/10/30 Javascript
jQuery动态产生select option下拉列表
2017/03/15 Javascript
JS+CSS实现下拉刷新/上拉加载插件
2017/03/31 Javascript
clipboard在vue中的使用的方法示例
2018/10/19 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
2019/04/04 Javascript
vue使用showdown并实现代码区域高亮的示例代码
2019/10/17 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
jQuery实现的解析本地 XML 文档操作示例
2020/04/30 jQuery
微信小程序自定义扫码功能界面的实现代码
2020/07/02 Javascript
Element Input输入框的使用方法
2020/07/26 Javascript
如何在JavaScript中正确处理变量
2020/12/25 Javascript
[02:51]DOTA2英雄基础教程 艾欧
2014/01/13 DOTA
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018/03/15 Python
windows上安装python3教程以及环境变量配置详解
2019/07/18 Python
在Pytorch中计算自己模型的FLOPs方式
2019/12/30 Python
python基于property()函数定义属性
2020/01/22 Python
matplotlib基础绘图命令之bar的使用方法
2020/08/13 Python
匡威德国官网:Converse德国
2019/01/26 全球购物
远程教育心得体会
2014/01/03 职场文书
光信息科学与技术专业职业生涯规划
2014/03/13 职场文书
高三学生评语大全
2014/04/25 职场文书
2015年超市工作总结范文
2015/05/26 职场文书
军事博物馆观后感
2015/06/05 职场文书
检讨书范文
2019/04/16 职场文书