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


Posted in Python onFebruary 18, 2015

看了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 代码效率的方法
Jul 03 Python
在Python中使用HTMLParser解析HTML的教程
Apr 29 Python
python开发之thread实现布朗运动的方法
Nov 11 Python
Python的Flask站点中集成xhEditor文本编辑器的教程
Jun 13 Python
解决python 输出是省略号的问题
Apr 19 Python
妙用itchat! python实现久坐提醒功能
Nov 25 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
Feb 18 Python
Python super()函数使用及多重继承
May 06 Python
Python OpenCV实现测量图片物体宽度
May 27 Python
详解python中GPU版本的opencv常用方法介绍
Jul 24 Python
如何把python项目部署到linux服务器
Aug 26 Python
Python使用windows设置定时执行脚本
Nov 12 Python
python持久性管理pickle模块详细介绍
Feb 18 #Python
Python中暂存上传图片的方法
Feb 18 #Python
Python中AND、OR的一个使用小技巧
Feb 18 #Python
Python编写屏幕截图程序方法
Feb 18 #Python
Python处理RSS、ATOM模块FEEDPARSER介绍
Feb 18 #Python
Python内置函数Type()函数一个有趣的用法
Feb 18 #Python
Python中使用MELIAE分析程序内存占用实例
Feb 18 #Python
You might like
PHP中文字符串截断无乱码解决方法
2016/10/10 PHP
ExtJs GridPanel简单的增删改实现代码
2010/08/26 Javascript
输入自动提示搜索提示功能的使用说明:sugggestion.txt
2013/09/02 Javascript
javascript使用isNaN()函数判断变量是否为数字
2013/09/21 Javascript
css与javascript跨浏览器兼容性总结
2014/09/15 Javascript
jQuery调用ajax请求的常见方法汇总
2015/03/24 Javascript
jQuery插件Zclip实现完美兼容个浏览器点击复制内容到剪贴板
2015/04/30 Javascript
jQuery实现弹出窗口中切换登录与注册表单
2015/06/05 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
angularjs ocLazyLoad分步加载js文件实例
2017/01/17 Javascript
Angular 4依赖注入学习教程之简介(一)
2017/06/04 Javascript
bootstrap confirmation按钮提示组件使用详解
2017/08/22 Javascript
JavaScript实现HTML5游戏断线自动重连的方法
2017/09/18 Javascript
如何使用proxy实现一个简单完整的MVVM库的示例代码
2019/09/17 Javascript
对vue中的事件穿透与禁止穿透实例详解
2019/10/28 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
vue中axios防止多次触发终止多次请求的示例代码(防抖)
2020/02/16 Javascript
JavaScript中break、continue和return的用法区别实例分析
2020/03/02 Javascript
Python对ElasticSearch获取数据及操作
2019/04/24 Python
使用python+whoosh实现全文检索
2019/12/09 Python
解决tensorboard多个events文件显示紊乱的问题
2020/02/15 Python
Python实现疫情通定时自动填写功能(附代码)
2020/05/27 Python
python编写一个会算账的脚本的示例代码
2020/06/02 Python
Python实现列表索引批量删除的5种方法
2020/11/16 Python
css3实现针线缝合效果(图解步骤)
2013/02/04 HTML / CSS
canvas线条的属性详解
2018/03/27 HTML / CSS
台湾最大网路书店:博客来
2018/03/18 全球购物
演讲稿怎么写
2014/01/07 职场文书
中层干部竞争上岗演讲稿
2014/01/13 职场文书
民生工程实施方案
2014/03/22 职场文书
中国梦演讲稿教师篇
2014/04/23 职场文书
2014年中秋寄语
2014/08/11 职场文书
毕业证丢失证明范本
2014/09/20 职场文书
2014年学生会主席工作总结
2014/11/07 职场文书
纯CSS实现酷炫的霓虹灯效果
2021/04/13 HTML / CSS
golang 接口嵌套实现复用的操作
2021/04/29 Golang