今天去辛集买箱包,下午挺晚才回来,又是恶心又是头痛。恶心是因为早上吃坏东西+晕车+回来时看到车祸现场,头痛大概是烈日和空调混合刺激而成。没有时间没有精神没有力气学习了,这篇博客就说说python中一个小小函数。
由于坑爹的学校坑爷的专业,多线程编程老师从来没教过,多线程的概念也是教的稀里糊涂,本人python也是菜鸟级别,所以遇到多线程的编程就傻眼了,别人用的顺手的join函数我却偏偏理解不来。早上在去辛集的路上想这个问题想到恶心,回来后继续写代码测试,终于有些理解了(python官方的英文解释理解不了,网友的解释也不够详细,只能自己钻)。
测试用的代码如下:
# coding: utf-8# 测试多线程中join的功能
import threading, time def doWaiting(): print 'start waiting1: ' + time.strftime('%H:%M:%S') + "\n" time.sleep(3) print 'stop waiting1: ' + time.strftime('%H:%M:%S') + "\n" def doWaiting1(): print 'start waiting2: ' + time.strftime('%H:%M:%S') + "\n" time.sleep(8) print 'stop waiting2: ', time.strftime('%H:%M:%S') + "\n" tsk = [] thread1 = threading.Thread(target = doWaiting) thread1.start() tsk.append(thread1) thread2 = threading.Thread(target = doWaiting1) thread2.start() tsk.append(thread2) print 'start join: ' + time.strftime('%H:%M:%S') + "\n" for tt in tsk: tt.join() print 'end join: ' + time.strftime('%H:%M:%S') + "\n"
这个小程序使用了两个线程thread1和thread2,线程执行的动作分别是doWaiting()和doWaiting1(),函数体就是打印「开始」+休眠3秒+打印「结束」,分别附加上时间用来查看程序执行的过程。后面用start()方法同步开始执行两个线程。然后开始循环调用两个线程的join()方法,在此之前和之后都会用print函数做好开始结束的标记。我们主要观察for tt in tsk: tt.join()。
join()不带参数的情况下,执行如下:
可以看到,两个线程并行执行,进程1在3s后结束,进程2在8s后结束,然后回到主进程,执行打印「end join」。
下面把参数设置成超时2s,即tt.join(2),执行如下:
两个线程开始并发执行,然后执行线程1的join(2),等线程1执行2s后就不管它了,执行线程2的join(2),等线程2执行2s后也不管它了(在此过程中线程1执行结束,打印线程1的结束信息),开始执行主进程,打印「end join」。4s之后线程2执行结束。
总结一下:
1.join方法的作用是阻塞主进程(挡住,无法执行join以后的语句),专注执行多线程。
2.多线程多join的情况下,依次执行各线程的join方法,前头一个结束了才能执行后面一个。
3.无参数,则等待到该线程结束,才开始执行下一个线程的join。
4.设置参数后,则等待该线程这么长时间就不管它了(而该线程并没有结束)。不管的意思就是可以执行后面的主进程了。
最后附上参数为2时的程序执行流程表,自己画的orz,这样看起来更好理解。
本文向大家介绍详解Python中的多线程编程,包括了详解Python中的多线程编程的使用技巧和注意事项,需要的朋友参考一下 一、简介 多线程编程技术可以实现代码并行性,优化处理能力,同时功能的更小划分可以使代码的可重用性更好。Python中threading和Queue模块可以用来实现多线程编程。 二、详解 1、线程和进程 进程(有时被称为重量级进程)是程序的一次执行。
9.3.4 Python 多线程编程 很多编程语言都支持多线程编程,Python 语言亦然。与其他编程语言相比,Python 的 多线程编程是非常简单的。 Python 提供了两个支持线程的模块,一个是较老的 thread 模块,另一个是较新的 threading 模块。其中 threading 采用了面向对象实现,功能更强,建议读者使用。 thread 模块的用法 任何程序一旦开始执行,就构成了
问题内容: 我正在研究python线程并遇到了。 作者告诉我,如果线程处于守护程序模式,那么我需要使用它,以便线程可以在主线程终止之前完成自身。 但我一直在使用也没见他即使不 示例代码是这个 我不知道这是什么用途,因为它不是守护程序,即使删除它也看不到任何变化 问题答案: 展示这种机制的技术有些笨拙:大概是由主线程调用的。也可以由另一个线程调用它,但是会不必要地使该图复杂化。 -调用应该放在主线程
本文向大家介绍Python多线程编程(三):threading.Thread类的重要函数和方法,包括了Python多线程编程(三):threading.Thread类的重要函数和方法的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍threading模块中的主类Thread的一些主要方法,实例代码如下: name相关 你可以为每一个thread指定name,默认的是Thread-No形式的
本文向大家介绍Python多线程编程(四):使用Lock互斥锁,包括了Python多线程编程(四):使用Lock互斥锁的使用技巧和注意事项,需要的朋友参考一下 前面已经演示了Python:使用threading模块实现多线程编程二两种方式起线程和Python:使用threading模块实现多线程编程三threading.Thread类的重要函数,这两篇文章的示例都是演示了互不相干的独立线程,现在我
本文向大家介绍Python多线程编程(八):使用Event实现线程间通信,包括了Python多线程编程(八):使用Event实现线程间通信的使用技巧和注意事项,需要的朋友参考一下 使用threading.Event可以实现线程间相互通信,之前的Python:使用threading模块实现多线程编程七[使用Condition实现复杂同步]我们已经初步实现了线程间通信的基本功能,但是更为通用的一种做法