python-thread & threading

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-thread & threading相关的知识,希望对你有一定的参考价值。

# 1、没有线程的例子
# 使用time.sleep()函数来演示线程的工作,这个例子主要为后面线程做对比。
# time.sleep()需要一个浮点型的参数,来指定“睡眠”的时间(单位秒)。这就相当于程序的运行会被挂起指定的时间。
# 代码解释:两个计时器,loop0睡眠4秒,loop1()睡眠2秒,它们是在一个进程或者线程中,顺序地执行loop0()和loop1(),那总运行时间为6秒。有可能启动过程中会再花些时间。

from time import sleep, ctime 

def loop0():  
    print ‘Start loop 0 at:‘, ctime()  
    sleep(4)  
    print ‘Loop 0 done at:‘, ctime() 

def loop1():  
    print ‘Start loop 1 at:‘, ctime()  
    sleep(2)  
    print ‘Loop 1 done at:‘, ctime() 

def main():  
    print ‘Starting at:‘, ctime()  
    loop0()  
    loop1()  
    print ‘All done at:‘, ctime() 

if __name__ == ‘__main__‘:  
    main()
# result:
Starting at: Wed Jul 26 23:10:41 2017
Start loop 0 at: Wed Jul 26 23:10:41 2017   # loop0() sleep(4)
Loop 0 done at: Wed Jul 26 23:10:45 2017
Start loop 1 at: Wed Jul 26 23:10:45 2017   # loop1() sleep(2)
Loop 1 done at: Wed Jul 26 23:10:47 2017
All done at: Wed Jul 26 23:10:47 2017
[Finished in 6.1s]
# 2、避免使用thread模块
#          Python提供了几个用于多线程编程的模块,包括thread、threading和Queue等。
#          (1) thread模块: 允许程序员创建和管理线程,它提供了基本的线程和锁的支持。
#          (2) threading模块: 允许程序员创建和管理线程,它提供了更高级别,更强的线程管理的功能。
#          (3) Queue模块: 允许用户创建一个可用于多个线程间共享数据的队列数据结构。
#          下面简单分析为什么需要避免使用thread模块?
#          (1) 首先更高级别的threading模块更为先进,对线程的支持更为完善,而且使用thread模块里的属性有可能会与threading出现冲突。
#          (2) 其次,低级别的thread模块的同步原语很少(实际只有一个),而threading模块则有很多。
#          (3) 另一个原因是thread对你的进程什么时候应该结束完全没有控制,当主线程结束时,所有的线程都会被强制结束掉,没有警告也不会有正常的清除工作。而threading模块能确保重要的子线程退出后进程才退出。
#          当然,为了你更好的理解线程,还是会对thread进行讲解。但是我们只建议那些有经验的专家想访问线程的底层结构时,才使用thread模块。而如果可以,你的第一个线程程序应尽可能使用threading等高级别的模块。

 

以上是关于python-thread & threading的主要内容,如果未能解决你的问题,请参考以下文章

Python-Thread(通俗易懂)

System.Threading.Thread.AbortInternal

Threading.SpinWait 结构与 Thread.SpinWait 方法

Python:进程(threading)

Boost.Thread 链接 - boost_thread 与 boost_thread-mt

使用 threading.Thread.join()