Python THREADING模块中的JOIN()方法深入理解

 更新时间:2015年02月18日 16:50:32   投稿:junjie  
这篇文章主要介绍了Python THREADING模块中的JOIN()方法深入理解,本文用简洁易懂的语言总结了对JOIN()方法的理解,不同于其它文章,需要的朋友可以参考下

看了oschina上的两个代码,受益匪浅。其中对join()方法不理解,看python官网文档的介绍:
join([timeout]):等待直到进程结束。这将阻塞正在调用的线程,直到被调用join()方法的线程结束。(好难翻译,应该是这个意思)

哈哈,这个易懂。
join方法,如果一个线程或者一个函数在执行过程中要调用另外一个线程,并且待到其完成以后才能接着执行,那么在调用这个线程时可以使用被调用线程的join方法。

复制代码 代码如下:

#-*- encoding: gb2312 -*-
import string, threading, time
 
def thread_main(a):
    global count, mutex
    # 获得线程名
    threadname = threading.currentThread().getName()
 
    for x in xrange(0, int(a)):
        # 取得锁
        mutex.acquire()
        count = count + 1
        # 释放锁
        mutex.release()
        print threadname, x, count
        time.sleep(1)
 
def main(num):
    global count, mutex
    threads = []
 
    count = 1
    # 创建一个锁
    mutex = threading.Lock()
    # 先创建线程对象
    for x in xrange(0, num):
        threads.append(threading.Thread(target=thread_main, args=(10,)))
    # 启动所有线程
    for t in threads:
        t.start()
    # 主线程中等待所有子线程退出
    for t in threads:
        t.join() 
 
if __name__ == '__main__':
    num = 4
    # 创建4个线程
    main(4)
###################################################################
#-*- encoding: gb2312 -*-
import threading
import time
 
class Test(threading.Thread):
    def __init__(self, num):
        threading.Thread.__init__(self)
        self._run_num = num
 
    def run(self):
        global count, mutex
        threadname = threading.currentThread().getName()
 
        for x in xrange(0, int(self._run_num)):
            mutex.acquire()
            count = count + 1
            mutex.release()
            print threadname, x, count
            time.sleep(1)
 
if __name__ == '__main__':
    global count, mutex
    threads = []
    num = 4
    count = 1
    # 创建锁
    mutex = threading.Lock()
    # 创建线程对象
    for x in xrange(0, num):
        threads.append(Test(10))
    # 启动线程
    for t in threads:
        t.start()
    # 等待子线程结束
    for t in threads:
        t.join()

在程序中,最后join()方法的调用就明白了,是主进程挨个调用子线程的join()方法。当四个线程都执行完毕后,主线程才会执行下面的代码,在这里也就是退出了。
相对应的在网上一起找到的另一个方法:
3.守护进程

setDaemon()

这个方法基本和join是相反的。当我们在程序运行中,执行一个主线程,如果主线程又创建一个子线程,主线程和子线程就分兵两路,分别运行,那么当主线程完成想退出时,会检验子线程是否完成。如果子线程未完成,则主线程会等待子线程完成后再退出。但是有时候我们需要的是,只要主线程完成了,不管子线程是否完成,都要和主线程一起退出,这时就可以用setDaemon方法啦

相关文章

  • python 变量初始化空列表的例子

    python 变量初始化空列表的例子

    今天小编就为大家分享一篇python 变量初始化空列表的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Python使用sys.path查看当前的模块搜索路径

    Python使用sys.path查看当前的模块搜索路径

    sys.path 是 Python 中的一个列表,它用于存储模块搜索路径,当你使用 import 语句导入一个模块时,Python 会按照 sys.path 列表中的路径顺序来查找这个模块,本文给大家介绍了Python使用sys.path查看当前的模块搜索路径,需要的朋友可以参考下
    2025-02-02
  • python3 requests库实现多图片爬取教程

    python3 requests库实现多图片爬取教程

    今天小编就为大家分享一篇python3 requests库实现多图片爬取教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python安装TA-Lib库报错问题的解决方法

    python安装TA-Lib库报错问题的解决方法

    TaLib是一个Python金融指数处理库,包含了很多技术分析里的常用参数指标,例如MA、SMA、WMA、MACD、ATR等,这篇文章主要给大家介绍了关于python安装TA-Lib库报错问题的解决方法,需要的朋友可以参考下
    2024-01-01
  • Python中安全地使用多进程和多线程进行数据共享

    Python中安全地使用多进程和多线程进行数据共享

    在并发编程中,有时多个线程或进程需要访问共享的数据,因此我们需要一些机制来确保数据的安全访问,本文将从多线程和多进程两个角度探讨Python如何安全地实现数据共享
    2024-12-12
  • 关于Python的各种文件操作

    关于Python的各种文件操作

    这篇文章主要介绍了关于Python的各种文件操作,适合刚入门的小白或者对于文件操作基础不太牢固的同学,需要的朋友可以参考下
    2023-04-04
  • django实现前后台交互实例

    django实现前后台交互实例

    本篇文章主要介绍了django实现前后台交互实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Tensorflow限制CPU个数实例

    Tensorflow限制CPU个数实例

    今天小编就为大家分享一篇Tensorflow限制CPU个数实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python中defaultdict用法实例详解

    python中defaultdict用法实例详解

    python中的dict是一个重要的数据类型,知道如何使用这个数据类型很简单,但是这个类型使用过程中容易进入一些误区,下面这篇文章主要给大家介绍了关于python中defaultdict用法的相关资料,需要的朋友可以参考下
    2022-09-09
  • 新手学习Python2和Python3中print不同的用法

    新手学习Python2和Python3中print不同的用法

    在本篇文章里小编给大家分享的是关于Python2和Python3中print不同的用法,有兴趣的朋友们可以学习下。
    2020-06-06

最新评论