返回顶部
首页 > 资讯 > 后端开发 > Python >python线程join方法与seDae
  • 110
分享到

python线程join方法与seDae

线程方法python 2023-01-31 06:01:31 110人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

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

基于上篇文章之后,我们了解了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方法了。

--结束END--

本文标题: python线程join方法与seDae

本文链接: https://lsjlt.com/news/190502.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python线程join方法与seDae
    基于上篇文章之后,我们了解了python程序执行流程,为什么要使用线程,以及什么情况下使用python线程,本文继此之后说说python多线程编程时,经常用到的join()和setDaemon()方法. join ()方法:主线程(主程...
    99+
    2023-01-31
    线程 方法 python
  • C#多线程的Join()方法
    一、简介 Join方法主要是用来阻塞调用线程,直到某个线程终止或经过了指定时间为止。官方的解释比较乏味,通俗的说就是创建一个子线程,给它加了这个方法,其它线程就会暂停执行,直到这个线...
    99+
    2024-04-02
  • Python多线程以及多线程中join()的使用方法
    本篇内容主要讲解“Python多线程以及多线程中join()的使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python多线程以及多线程中join()的使用方法”吧!Python多线程与...
    99+
    2023-06-20
  • Python多线程以及多线程中join()的使用方法示例
    Python多线程与多进程中join()方法的效果是相同的。 下面仅以多线程为例: 首先需要明确几个概念: 知识点一: 当一个进程启动之后,会默认产生一个主线程,因为线程是程序执行流...
    99+
    2024-04-02
  • JAVA多线程中join()方法的使用方法
    虽然关于讨论线程join()方法的博客已经非常极其特别多了,但是前几天我有一个困惑却没有能够得到详细解释,就是当系统中正在运行多个线程时,join()到底是暂停了哪些线程,大部分博客...
    99+
    2024-04-02
  • JAVA多线程中join()方法怎么用
    小编给大家分享一下JAVA多线程中join()方法怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!虽然关于讨论线程join()方法的博客已经非常极其特别多了,但是前几天我有一个困惑却没有能够得到详细解释,就是当系统中正...
    99+
    2023-06-15
  • java多线程join方法怎么使用
    在Java中,join()方法是Thread类的一个方法,用于等待该线程完成执行。当在一个线程中调用另一个线程的join()方法时,当前线程会被阻塞,直到被调用的线程执行完毕。join()方法有两种使用方式:1. join():调用该方...
    99+
    2023-08-11
    java join
  • python线程join怎么使用
    在Python中,线程的join()方法可以用来等待一个线程的结束。具体使用方法如下:1. 创建一个线程对象,并启动线程:```py...
    99+
    2023-09-25
    python
  • join()方法如何在多线程中使用
    今天就跟大家聊聊有关join()方法如何在多线程中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Thread中,join()方法的作用是调用线程等待该线程完成后,才能继续用下运行...
    99+
    2023-05-31
    多线程 join
  • python线程join的作用是什么
    Python中的线程是独立运行的,即使主线程(即主程序)运行结束,子线程仍然会继续执行。线程的join()方法的作用是阻塞主线程,直...
    99+
    2023-08-11
    python join
  • Python线程isAlive方法
    __author__ = 'LL_YING' ''' 线程创建之后,可以使用Thread对象的isAlive方法查看线程是否运行,为True则运行 ''' import threading import time class myThr...
    99+
    2023-01-31
    线程 方法 Python
  • 怎么在python多线程中使用join
    怎么在python多线程中使用join?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、...
    99+
    2023-06-14
  • python的多线程中的join的作用
    1 python 默认参数创建线程后,不管主线程是否执行完毕,都会等待子线程执行完毕才一起退出,有无join结果一样例子如下: import threading import time def say(name): print('...
    99+
    2023-01-31
    多线程 作用 python
  • python多线程线程锁的使用方法
    小编给大家分享一下python多线程线程锁的使用方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python的数据类型有哪些python的数据类型:1. 数字类...
    99+
    2023-06-14
  • Python线程的创建与常用方法是什么
    这篇文章主要介绍“Python线程的创建与常用方法是什么”,在日常操作中,相信很多人在Python线程的创建与常用方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python线程的创建与常用方法是什么...
    99+
    2023-06-30
  • Python线程的终止方法
    a=M() a.start() print dir(a) import time time.sleep(3) import signala._Thread__stop() print a._Thread__stopped True | F...
    99+
    2023-01-31
    线程 方法 Python
  • python多线程方法详解
    处理多个数据和多文件时,使用for循环的速度非常慢,此时需要用多线程来加速运行进度,常用的模块为multiprocess和joblib,下面对两种包我常用的方法进行说明。 1、模块安...
    99+
    2024-04-02
  • C#中Intersect与Join方法怎么使用
    在C#中,Intersect方法用于查找两个集合的交集,而Join方法用于连接两个集合中的元素。 下面分别介绍它们的使用方法: I...
    99+
    2024-04-02
  • Java中的线程如何使用使用join方法进行暂停
    Java中的线程如何使用使用join方法进行暂停?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。具体内容如下Java代码:package Threads;import java....
    99+
    2023-05-31
    java join 线程
  • Python中多线程和线程池的使用方法
    Python是一种高级编程语言,它在众多编程语言中,拥有极高的人气和使用率。Python中的多线程和线程池是其强大的功能之一,可以让我们更加高效地利用CPU资源,提高程序的运行速度。本篇博客将介绍Py...
    99+
    2023-10-12
    python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作