我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python线程join方法与seDae

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python线程join方法与seDae

基于上篇文章之后,我们了解了python程序执行流程,为什么要使用线程,以及什么情况下使用python线程,本文继此之后说说python多线程编程时,经常用到的join()和setDaemon()方法.

join ()方法:主线程(主程序)A中,创建了子线程B,并且在主线程A中调用了B.join()方法(或多个线程中的一个join()方法),那么,主线程A会在调用的地方等待,直到子线程B完成操作后,才可以接着往下执行.

无join()方法代码示例:

import threading
import time

class MyThread(threading.Thread):
    def __init__(self, id):
        threading.Thread.__init__(self)
        self.id = id
        print("I am child thread %s" % self.name)

    def run(self):
        time.sleep(6)  # 模拟阻塞
        print("%s running:%s" % (self.name, self.id))

if __name__ == "__main__":
    threads = []
    for i in range(5):
        threads.append(MyThread(i))    #生成线程实例
    for t in threads:     #

        t.start()       #由主线程启动所有线程

    for i in range(5):        #返回到主线程继续
        print("I am in Master Thread.",i)

运行结果:
python线程join方法与seDaemon方法

以上执行结果没有使用join()方法;主线程先生成生成子线程,子线程执行,由于执行过程中阻塞,返回执行主线程(主程序)内容,此间暂停了等主线程执行完后,子线程执行结束返回了执行结果.

加入join()方法程序执行示例

import threading
import time

class MyThread(threading.Thread):
    def __init__(self, id):
        threading.Thread.__init__(self)
        self.id = id
        print("I am child thread %s" % self.name)

    def run(self):
        time.sleep(6)  # 模拟阻塞
        print("%s running:%s" % (self.name, self.id))

if __name__ == "__main__":
    threads = []
    for i in range(5):
        threads.append(MyThread(i))    #生成线程实例
    for t in threads:     #

        t.start()       #由主线程启动所有线程
    t.join()            #等待所有线程运行结束,没有这条,由于线程里run中有阻塞,故主线程不等,而直接运行下面的for i

    for i in range(5):        #返回到主线程继续
        print("I am in Master Thread.",i)

执行结果如图:
python线程join方法与seDaemon方法

上面的程序代码只是加了join()方法,在有join时 等待所有子线程执行完毕(阻塞),(准确的说是等最后一个线程执行完毕) 再切回主线程(主程序)执行.

小结:jion()方法就是为了让主线程等待子线执行完并返回结果后,再执行主线程剩下的内容.子线程不执行完,主线程就一直等待状态.没有加join()方法时主线程只是开启子线程,至于子线程执行多久何里返回值,主线程暂时不管,仍然执行剩下的主程序,多次运行以上程序你会发现,在开启子线程后,主线程执行剩下的主程序时,有时没有执行完主程序,期间夹杂着子线程执行完返回的结果.这是有可能的,并不是程序出错.

setDaemon()方法:主线程A中,创建了子线程B,并且在主线程A中调用了B.setDaemon()方法(B子线程只是其中子线程的一个)意思是,把主线程A设置为守护线程,这时候,要是主线程A执行结束了,就不管子线程B是否完成,一并和主线程A退出.这就是setDaemon方法的含义,这基本上和join是相反的作用。此外,需要特别注意的是:必须在start() 方法调用之前设置.
在以上的代码中稍稍修改即可看出setDaemon方法的作用;
示例代码:

import threading
import time

class MyThread(threading.Thread):
    def __init__(self, id):
        threading.Thread.__init__(self)
        self.id = id
        print("I am child thread %s" % self.name)

    def run(self):
        x = 0
        if self.id == 0:
            time.sleep(5)     #模拟阻塞
            print("%s running:%s" %(self.name,self.id))
        else:
            time.sleep(2)  # 模拟阻塞(程序执行时间)
            print("%s running:%s" % (self.name, self.id))

if __name__ == "__main__":
    threads = []
    for i in range(5):
        threads.append(MyThread(i))    #生成线程实例
    threads[0].setDaemon(True)        # 0号线程  不受保护,主线程结束时,如果没有运行完也结束掉
    for t in threads:     #

        t.start()       #由主线程启动所有线程
    t.join()            #等待所有线程运行结束,没有这条,由于线程里run中有阻塞,故主线程不等,而直接运行下面的for i

    for i in range(5):        #返回到主线程继续
        print("I am in Master Thread.",i)

运行结果:
python线程join方法与seDaemon方法

说明:
Threads[0].setDaemon(True) 对0号线程 设置不受保护,主线程结束时,如果没有运行完也结束掉;在程序中我设置了对Threads-0阻塞为5秒,而其他的子线程为2秒,0号线程设置了不受保护,所以在主线程执行完后,就退出了,不再等待.而其他子线程不受影响,可以把Thread[0]换成其他子线程,效果是一样的.

通过以上对join() setDaemon()方法的实验,我们总结如下:
程序运行是一个进程,一个进程最少有一个线程,这个线程就是主线程;执行一个主线程,如果主线程又创建一个或多个子线程,主线程和子线程就分兵多路,分别运行,那么当主线程完成想退出时,会检验子线程是否完成。如果子线程未完成,则主线程会等待子线程完成后再退出。就要加join()方法实现;但是有时候我们需要的是,只要主线程完成了,不管子线程是否完成,都要和主线程一起退出,这时就可以用setDaemon方法了。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python线程join方法与seDae

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python线程join方法与seDae

基于上篇文章之后,我们了解了python程序执行流程,为什么要使用线程,以及什么情况下使用python线程,本文继此之后说说python多线程编程时,经常用到的join()和setDaemon()方法.join ()方法:主线程(主程序)A
2023-01-31

Python多线程以及多线程中join()的使用方法

本篇内容主要讲解“Python多线程以及多线程中join()的使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python多线程以及多线程中join()的使用方法”吧!Python多线程与
2023-06-20

java多线程join方法怎么使用

在Java中,join()方法是Thread类的一个方法,用于等待该线程完成执行。当在一个线程中调用另一个线程的join()方法时,当前线程会被阻塞,直到被调用的线程执行完毕。join()方法有两种使用方式:1. join():调用该方法的
2023-08-11

JAVA多线程中join()方法怎么用

小编给大家分享一下JAVA多线程中join()方法怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!虽然关于讨论线程join()方法的博客已经非常极其特别多了,但是前几天我有一个困惑却没有能够得到详细解释,就是当系统中正
2023-06-15

python线程join怎么使用

在Python中,线程的join()方法可以用来等待一个线程的结束。具体使用方法如下:1. 创建一个线程对象,并启动线程:```pythonimport threadingdef my_function():# 你的线程代码thread =
2023-09-25

join()方法如何在多线程中使用

今天就跟大家聊聊有关join()方法如何在多线程中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Thread中,join()方法的作用是调用线程等待该线程完成后,才能继续用下运行
2023-05-31

C++多线程 join 与 detach 分离线程的区别

C++作为一门强大的系统编程语言,自然也提供了丰富的多线程支持,多线程中的两个重要操作:join和detach。

python线程join的作用是什么

Python中的线程是独立运行的,即使主线程(即主程序)运行结束,子线程仍然会继续执行。线程的join()方法的作用是阻塞主线程,直到指定的线程完成其任务。具体来说,join()方法会导致主线程等待指定的线程执行完毕,然后再继续执行后面的代
2023-08-11

Python线程isAlive方法

__author__ = 'LL_YING''''线程创建之后,可以使用Thread对象的isAlive方法查看线程是否运行,为True则运行'''import threadingimport timeclass myThread(thre
2023-01-31

python的多线程中的join的作用

1 python 默认参数创建线程后,不管主线程是否执行完毕,都会等待子线程执行完毕才一起退出,有无join结果一样例子如下:import threadingimport timedef say(name): print('%s is
2023-01-31

怎么在python多线程中使用join

怎么在python多线程中使用join?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、
2023-06-14

在 Java 中,join 方法与 wait 方法之间存在怎样的关系?(Java中join方法与wait方法的关系)

在Java编程中,join方法和wait方法都是用于线程控制和协作的重要工具。虽然它们都与线程的同步和等待有关,但它们在功能和使用场景上存在一些重要的区别和联系。一、join方法
在 Java 中,join 方法与 wait 方法之间存在怎样的关系?(Java中join方法与wait方法的关系)
Java2024-12-17

Java 中 join()方法在多线程同步方面究竟起到了何种作用?(java join()方法在多线程同步中的作用是什么)

在Java多线程编程中,join()方法是一个非常重要的用于线程同步的工具。它主要用于等待其他线程完成其任务,然后再继续当前线程的执行。一、join()方法的基本概念和语法join()
Java 中 join()方法在多线程同步方面究竟起到了何种作用?(java join()方法在多线程同步中的作用是什么)
Java2024-12-21

python多线程线程锁的使用方法

小编给大家分享一下python多线程线程锁的使用方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python的数据类型有哪些?python的数据类型:1. 数字
2023-06-14

Python线程的创建与常用方法是什么

这篇文章主要介绍“Python线程的创建与常用方法是什么”,在日常操作中,相信很多人在Python线程的创建与常用方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python线程的创建与常用方法是什么
2023-06-30

Python线程的终止方法

a=M()a.start()print dir(a)import timetime.sleep(3)import signala._Thread__stop()print a._Thread__stopped True | False
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录