博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

thread 模块

Posted on 2015-07-06 16:14  bw_0927  阅读(141)  评论(0)    收藏  举报

Python 标准库提供了 thread 和 threading 两个模块来对多线程进行支持。其中, thread 模块以低级、原始的方式来处理和控制线程,而 threading 模块通过对 thread 进行二次封装,提供了更方便的 api 来处理线程。 虽然使用 thread 没有 threading 来的方便,但它更灵活。

python中关于多线程的操作可以使用thread和threading模块来实现,其中thread模块在Py3中已经改名为_thread,不再推荐使用。而threading模块是在thread之上进行了封装,也是推荐使用的多线程模块。

 

thread.start_new_thread function args [ , kwargs ] ) 

函数将创建一个新的线程,并返回该线程的标识符(标识符为整数)。参数 function 表示线程创建之后,立即执行的函数,参数 args 是该函数的参数,它是一个元组类型;第二个参数 kwargs 是可选的,它为函数提供了命名参数字典。函数执行完毕之后,线程将自动退出。如果函数在执行过程中遇到未处理的异常,该线程将退出,但不会影响其他线程的执行。 

#/usr/bin/python

import thread
import time

def print_time(threadName, delay):
    count = 0
    while count < 5:
        time.sleep(delay)
        count += 1
        print "%s: %s" % (threadName, time.ctime(time.time()))

try:
    thread.start_new_thread(print_time, ("Thread-1", 2,))
    thread.start_new_thread(print_time, ("Thread-2", 4,))
except:
    print "Error"

while 1:
    pass

  

thread.exit ()

  结束当前线程。调用该函数会触发 SystemExit 异常,如果没有处理该异常,线程将结束。   

thread.get_ident ()

  返回当前线程的标识符,标识符是一个非零整数。

thread.interrupt_main ()

  在主线程中触发 KeyboardInterrupt 异常。子线程可以使用该方法来中断主线程。下面的例子演示了在子线程中调用 interrupt_main ,在主线程中捕获异常 :

 

[python] view plaincopy
 
  1. import thread, time  
  2. thread.start_new_thread(lambda : (thread.interrupt_main(), ), ())  
  3. try:  
  4.     time.sleep(2)  
  5. except KeyboardInterrupt, e:  
  6.     print 'error:', e  

 

lock.acquire ( [ waitflag ] )

  获取琐。函数返回一个布尔值,如果获取成功,返回 True ,否则返回 False 。参数 waitflag 的默认值是一个非零整数,表示如果琐已经被其他线程占用,那么当前线程将一直等待,只到其他线程释放,然后获取访琐。如果将参数 waitflag 置为 0 ,那么当前线程会尝试获取琐,不管琐是否被其他线程占用,当前线程都不会等待。

lock.release ()

  释放所占用的琐。

lock.locked ()

  判断琐是否被占用。