python多线程编程中的join函数使用心得

今天去辛集买箱包,下午挺晚才回来,又是恶心又是头痛。恶心是因为早上吃坏东西+晕车+回来时看到车祸现场,头痛大概是烈日和空调混合刺激而成。没有时间没有精神没有力气学习了,这篇博客就说说python中一个小小函数。

由于坑爹的学校坑爷的专业,多线程编程老师从来没教过,多线程的概念也是教的稀里糊涂,本人python也是菜鸟级别,所以遇到多线程的编程就傻眼了,别人用的顺手的join函数我却偏偏理解不来。早上在去辛集的路上想这个问题想到恶心,回来后继续写代码测试,终于有些理解了(python官方的英文解释理解不了,网友的解释也不够详细,只能自己钻)。
测试用的代码如下:

复制代码 代码如下:
# coding: utf-8

# 测试多线程中join的功能

import threading, time 
def doWaiting(): 
    print ‘start waiting1: ‘ + time.strftime(‘%H:%M:%S’) + “” 
    time.sleep(3) 
    print ‘stop waiting1: ‘ + time.strftime(‘%H:%M:%S’) + “”
def doWaiting1(): 
    print ‘start waiting2: ‘ + time.strftime(‘%H:%M:%S’) + “”  
    time.sleep(8) 
    print ‘stop waiting2: ‘, time.strftime(‘%H:%M:%S’) + “” 
tsk = []   
thread1 = threading.Thread(target = doWaiting) 
thread1.start() 
tsk.append(thread1)
thread2 = threading.Thread(target = doWaiting1) 
thread2.start() 
tsk.append(thread2)
print ‘start join: ‘ + time.strftime(‘%H:%M:%S’) + “”  
for tt in tsk:
    tt.join()
print ‘end join: ‘ + time.strftime(‘%H:%M:%S’) + “”

这个小程序使用了两个线程thread1和thread2,线程执行的动作分别是doWaiting()和doWaiting1(),函数体就是打印「开始」+休眠3秒+打印「结束」,分别附加上时间用来查看程序执行的过程。后面用start()方法同步开始执行两个线程。然后开始循环调用两个线程的join()方法,在此之前和之后都会用print函数做好开始结束的标记。我们主要观察for tt in tsk: tt.join()。

join()不带参数的情况下,执行如下:

python多线程编程中的join函数使用心得

立即学习“Python免费学习笔记(深入)”;

可以看到,两个线程并行执行,进程1在3s后结束,进程2在8s后结束,然后回到主进程,执行打印「end join」。

下面把参数设置成超时2s,即tt.join(2),执行如下:

python多线程编程中的join函数使用心得

两个线程开始并发执行,然后执行线程1的join(2),等线程1执行2s后就不管它了,执行线程2的join(2),等线程2执行2s后也不管它了(在此过程中线程1执行结束,打印线程1的结束信息),开始执行主进程,打印「end join」。4s之后线程2执行结束。

总结一下:

1.join方法的作用是阻塞主进程(挡住,无法执行join以后的语句),专注执行多线程。

2.多线程多join的情况下,依次执行各线程的join方法,前头一个结束了才能执行后面一个。

3.无参数,则等待到该线程结束,才开始执行下一个线程的join。

4.设置参数后,则等待该线程这么长时间就不管它了(而该线程并没有结束)。不管的意思就是可以执行后面的主进程了。

最后附上参数为2时的程序执行流程表,自己画的orz,这样看起来更好理解。

python多线程编程中的join函数使用心得

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2290954.html

(0)
上一篇 2025年2月28日 00:40:18
下一篇 2025年2月26日 11:34:33

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Linux(CentOS7)安装最新版Python

    在CentOS7系统中安装最新版的Python,可以通过以下步骤来实现: 确认系统已安装依赖库 在安装Python之前,需要确保系统已安装必要的依赖库。 常见的依赖库包括: gcc编译器zlib和openssl开发库readline和sql…

    2025年2月28日
    200
  • Python深入学习之闭包

    闭包(closure)是函数式编程的重要的语法结构。函数式编程是一种编程范式 (而面向过程编程和面向对象编程也都是编程范式)。在面向过程编程中,我们见到过函数(function);在面向对象编程中,我们见过对象(object)。函数和对象的…

    编程技术 2025年2月28日
    200
  • Python中函数的用法实例教程

    本文以数值计算为例讲述了python中函数的用法,分享给大家供大家参考借鉴之用。具体如下: 我们都知道圆的面积计算公式为: S = πr2 当我们知道半径r的值时,就可以根据公式计算出面积。假设我们需要计算3个不同大小的圆的面积: r1 =…

    编程技术 2025年2月28日
    200
  • Python Tkinter基础控件用法

    本文实例展示了python tkinter基础控件的用法,分享给大家供大家参考之用。具体方法如下: # -*- coding: utf-8 -*-from Tkinter import *def btn_click(): b2[‘text’…

    2025年2月28日
    200
  • Python深入学习之特殊方法与多范式

    python一切皆对象,但同时,python还是一个多范式语言(multi-paradigm),你不仅可以使用面向对象的方式来编写程序,还可以用面向过程的方式来编写相同功能的程序(还有函数式、声明式等,我们暂不深入)。python的多范式依…

    编程技术 2025年2月28日
    200
  • python中的reduce内建函数使用方法指南

    官方解释: Apply function of two arguments cumulatively to the items of iterable, from left to right, so as to reduce the ite…

    编程技术 2025年2月28日
    200
  • Python中使用ConfigParser解析ini配置文件实例

    ini文件是windows中经常使用的配置文件,主要的格式为: 复制代码 代码如下:[Section1]option1 : value1option2 : value2 python提供了一个简单的模块ConfigParser可以用来解析类…

    编程技术 2025年2月28日
    200
  • python中遍历文件的3个方法

    今天写一个在windows下批量修改文件名的python脚本,用到文件的遍历。用python进行文件遍历有多种方法,这里列举并说明一下。 os.path.walk() 这是一个传统的用法。 walk(root,callable,args)方…

    编程技术 2025年2月28日
    200
  • python进阶教程之动态类型详解

    动态类型(dynamic typing)是python另一个重要的核心概念。我们之前说过,python的变量(variable)不需要声明,而在赋值时,变量可以重新赋值为任意值。这些都与动态类型的概念相关。 动态类型 在我们接触的对象中,有…

    编程技术 2025年2月28日
    200
  • python字符串排序方法

    本文以实例形式简述了python实现字符串排序的方法,是python程序设计中一个非常实用的技巧。分享给大家供大家参考之用。具体方法如下: 一般情况下,python中对一个字符串排序相当麻烦: 一、python中的字符串类型是不允许直接改变…

    编程技术 2025年2月28日
    200

发表回复

登录后才能评论