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中用Descriptor实现类级属性(Property)详解
Sep 18 Python
CentOS中使用virtualenv搭建python3环境
Jun 08 Python
Python找出list中最常出现元素的方法
Jun 14 Python
用python 批量更改图像尺寸到统一大小的方法
Mar 31 Python
Anaconda入门使用总结
Apr 05 Python
详解将Django部署到Centos7全攻略
Sep 26 Python
python+flask实现API的方法
Nov 21 Python
Python数据抓取爬虫代理防封IP方法
Dec 23 Python
python实现kmp算法的实例代码
Apr 03 Python
python实现扫描ip地址的小程序
Apr 16 Python
python中tkinter窗口位置\坐标\大小等实现示例
Jul 09 Python
python scrapy简单模拟登录的代码分析
Jul 21 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 求质素(素数) 的实现代码
2011/04/12 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
2020/05/02 PHP
jQuery性能优化的38个建议
2014/03/04 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
2014/04/16 Javascript
javascript中clone对象详解
2014/12/03 Javascript
jquery获取多个checkbox的值异步提交给php
2015/07/07 Javascript
js控住DOM实现发布微博效果
2016/08/30 Javascript
js实现砖头在页面拖拉效果
2020/11/20 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
vue多层嵌套路由实例分析
2019/03/19 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
2019/04/02 Javascript
微信小程序 行的删除和增加操作实现详解
2019/09/29 Javascript
laravel实现中文和英语互相切换的例子
2019/09/30 Javascript
JS document内容及样式操作完整示例
2020/01/14 Javascript
浅谈Ant Design Pro 菜单自定义 icon
2020/11/17 Javascript
[07:09]2014DOTA2国际邀请赛-Newbee再次发威成功晋级决赛
2014/07/19 DOTA
[45:16]完美世界DOTA2联赛循环赛 IO vs FTD BO2第二场 11.05
2020/11/06 DOTA
python批量生成本地ip地址的方法
2015/03/23 Python
Python实现国外赌场热门游戏Craps(双骰子)
2015/03/31 Python
Python中使用pprint函数进行格式化输出的教程
2015/04/07 Python
使用Python脚本生成随机IP的简单方法
2015/07/30 Python
python链接oracle数据库以及数据库的增删改查实例
2018/01/30 Python
对Python中list的倒序索引和切片实例讲解
2018/11/15 Python
python Popen 获取输出,等待运行完成示例
2019/12/30 Python
python正则表达式实例代码
2020/03/03 Python
基于python实现获取网页图片过程解析
2020/05/11 Python
德国高性价比网上药店:medpex
2017/07/09 全球购物
年度考核自我鉴定
2014/03/19 职场文书
生育关怀行动实施方案
2014/03/26 职场文书
期中考试反思800字
2014/05/01 职场文书
企业仓管员岗位职责
2014/06/15 职场文书
团队会宣传标语
2014/10/09 职场文书
华清池导游词
2015/02/02 职场文书
团员个人总结
2015/02/26 职场文书
消防安全主题班会
2015/08/12 职场文书
党员读书活动心得体会
2016/01/14 职场文书