【python】多线程编程中join函数的用法

在学习python 多线程编程的时候,一定会使用一个函数join,本章内容通过例子讲述join 在多线程编程中有哪些作用。
本文使用两段代码演示其功能
代码一 
import threading, time
def now() :
    return str( time.strftime( '%Y-%m-%d %H:%M:%S' , time.localtime() ) )
def func1():
    print 'start func1: ' + now() + "\n"
    time.sleep(3)
    print 'stop func1: ' + now() + "\n"
def func2():
    print 'start func2: ' + now() + "\n"
    time.sleep(5)
    print 'stop func2: ', now() + "\n"
thtsk = []
thread1 = threading.Thread(target = func1)
thread1.start()
thtsk.append(thread1)
thread2 = threading.Thread(target = func2)
thread2.start()
thtsk.append(thread2)
print 'start join: ' + now() + "\n"
for thd in thtsk:
    thd.join()
print 'end join: ' + now() + "\n"
该样例中使用了两个线程thread1,thread2,分别执行func1,func2,
其中
func1 的动作是打印开始时间,sleep 3s,打印结束时间
func2 的动作是打印开始时间,sleep 5s,打印结束时间。
后面使用start() 方法同步开始执行两个线程,然后开始循环调用两个线程的join()方法,join不加参数的时候结果如下:

解释:
    func1 在3s 之后结束,fun2 在5s之后结束,并且最后输出 【end join】
代码二
import threading, time
def now() :
    return str( time.strftime( '%Y-%m-%d %H:%M:%S' , time.localtime() ) )
def func1():
    print 'start func1: ' + now() + "\n"
    time.sleep(3)
    print 'stop func1: ' + now() + "\n"
def func2():
    print 'start func2: ' + now() + "\n"
    time.sleep(8)
    print 'stop func2: ', now() + "\n"
thtsk = []
thread1 = threading.Thread(target = func1)
thread1.start()
thtsk.append(thread1)
thread2 = threading.Thread(target = func2)
thread2.start()
thtsk.append(thread2)
print 'start join: ' + now() + "\n"
for thd in thtsk:
    thd.join(2)
print 'end join: ' + now() + "\n"
在join()函数添加参数 2 ,表示等待两秒,结果如下

解释:
    两个线程开始并发执行,先执行func1的join(2),等func1执行2s后,执行func2的join(2),等线程2执行2s后,开始执行主进程,打印「end join」,1s之后fun2执行结束。
这里join(2)标示2s之后不管当前线程是否执行完成,都会处理下一个线程。

总结一下:
1 join方法的作用是阻塞主进程无法执行join以后的语句,专注执行多线程,必须等待多线程执行完毕之后才能执行主线程的语句。
2 多线程多join的情况下,依次执行各线程的join方法,前一个结束之后,才能执行后一个。
3 无参数,则等待到该线程结束,才开始执行下一个线程的join。
4 设置参数后,则等待该线程N秒之后不管该线程是否结束,就开始执行后面的主进程。

时间: 2024-12-02 16:58:36

【python】多线程编程中join函数的用法的相关文章

python多线程编程中的join函数使用心得_python

今天去辛集买箱包,下午挺晚才回来,又是恶心又是头痛.恶心是因为早上吃坏东西+晕车+回来时看到车祸现场,头痛大概是烈日和空调混合刺激而成.没有时间没有精神没有力气学习了,这篇博客就说说python中一个小小函数. 由于坑爹的学校坑爷的专业,多线程编程老师从来没教过,多线程的概念也是教的稀里糊涂,本人python也是菜鸟级别,所以遇到多线程的编程就傻眼了,别人用的顺手的join函数我却偏偏理解不来.早上在去辛集的路上想这个问题想到恶心,回来后继续写代码测试,终于有些理解了(python官方的英文解释

Python网络编程中urllib2模块的用法总结_python

一.最基础的应用 import urllib2 url = r'http://www.baidu.com' html = urllib2.urlopen(url).read() print html 客户端与服务器端通过request与response来沟通,客户端先向服务端发送request,然后接收服务端返回的response urllib2提供了request的类,可以让用户在发送请求前先构造一个request的对象,然后通过urllib2.urlopen方法来发送请求 import ur

python多线程编程

Python多线程编程中常用方法: 1.join()方法:如果一个线程或者在函数执行的过程中调用另一个线程,并且希望待其完成操作后才能执行,那么在调用线程的时就可以使用被调线程的join方法join([timeout]) timeout:可选参数,线程运行的最长时间 2.isAlive()方法:查看线程是否还在运行 3.getName()方法:获得线程名 4.setDaemon()方法:主线程退出时,需要子线程随主线程退出,则设置子线程的setDaemon() Python线程同步: (1)Th

Java多线程编程中synchronized关键字的基础用法讲解_java

多线程编程中,最关键.最关心的问题应该就是同步问题,这是一个难点,也是核心. 从jdk最早的版本的synchronized.volatile,到jdk 1.5中提供的java.util.concurrent.locks包中的Lock接口(实现有ReadLock,WriteLock,ReentrantLock),多线程的实现也是一步步走向成熟化.   同步,它是通过什么机制来控制的呢?第一反应就是锁,这个在学习操作系统与数据库的时候,应该都已经接触到了.在Java的多线程程序中,当多个程序竞争同一

mapreduce 多线程-mapreduce编程中reduce函数可否使用多线程下载一个网页

问题描述 mapreduce编程中reduce函数可否使用多线程下载一个网页 想编写一个程序用到mapreduce框架,实现多线程下载网页 不知能否实现, 我的理解是:一个key/value对调用一次reduce函数,对一个网页没有必要用多线程.这里传入的key就是url

Python多线程编程学习

Python 提供了几个用于多线程编程的模块,包括thread, threading 和Queue 等.thread 和threading 模块允许程序员创建和管理线程.thread 模块提供了基本的线程和锁的支持,而threading提供了更高级别,功能更强的线程管理的功能.Queue 模块允许用户创建一个可以用于多个线程之间共享数据的队列数据结构. 注意:避免使用thread模块,因为它不支持守护线程.当主线程退出时,所有的子线程不论它们是否还在工作,都会被强行退出. 下面重点说说threa

Jquery中map函数的用法_jquery

很久没用map()这个函数了,由于最近看一篇react的文章,其中有谈到map()这个函数,于是就重新查了一些资料,发现map()函数可以用在不同的地方,下面小编总结具有内容分享给大家,也方便今后查找. 其实,本人一直很少用map()这个函数,因为最近看一篇React的文章,其实有谈及map()函数,于是自己也重新查了一些资料,发现map()函数也可以用在不同的地方: map()函数把每个元素通过函数传递到当前匹配集合中,生成包含返回值的新的Jquery对象 语法:.map(callback(i

事件对象在多线程编程中的应用

本课中我们将要学习事件对象以及如何在多线程编程中如何使用同步对象. 理论:上一课中我们演示了如何用WINDOWS消息在不同的线程之间进行通讯.另外的两种,即:使用全局变量和事件对象,将在本课中讲解. 事件对象就像一个开关:它只有两种状态---开和关.当一个事件处于"开"状态,我们称其为"有信号"否则称为"无信号".您可以在一个线程的执行函数中创建一个事件对象,然后观察它的状态,如果是"无信号"就让该线程睡眠,这样该线程占用的C

Android编程中软键盘基本用法分析_Android

本文实例讲述了Android编程中软键盘基本用法.分享给大家供大家参考,具体如下: 调用下面代码:(第一次调用显示,再次调用则隐藏,如此反复),this指activity InputMethodManager imm = (InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); imm.sh