python多线程模块threading

来源:互联网 发布:以太网是什么网络 编辑:程序博客网 时间:2024/06/05 21:20

本模块的高层线程接口构建在低层的thread模块上,相比较thread而言,threading高级函数使用简单方便。

本模块定义了以下的函数和对象:
threading.active_count()
threading.activeCount()
返回当前活着的Thread对象的个数。返回的数目等于enumerate()返回的列表的长度。

threading.Condition()
一个工厂函数,返回一个新的条件变量对象。一个条件变量允许一个或多个线程等待直至它们收到另外一个线程的通知。

threading.current_thread()
threading.currentThread()
返回当前的Thread对象,对应于调用者控制的线程。如果调用者控制的线程不是通过threading模块创建的,则返回一个只有有限功能的虚假线程对象。

threading.enumerate()
返回当前活着的Thread对象的列表。该列表包括守护线程、由current_thread()创建的虚假线程对象和主线程。它不包括终止的线程和还没有开始的线程。

threading.Event()
一个工厂函数,返回一个新的event对象。一个event管理一个标志,该标志可以通过set()方法设置为真或通过clear()方法重新设置为假。wait()方法将阻塞直至该标志为真。

class threading.local
表示thread-local数据的一个类。thread-local数据是值只特定于线程的数据。要管理thread-local数据,只需创建local(或其子类)的一个实例并在它上面存储属性:

mydata = threading.local()
mydata.x = 1

该实例的值对于各自的线程将是不同的。

threading.Lock()
一个工厂函数,返回一个新的原锁对象。一个线程一旦获得它,接下来尝试获得它都将阻塞,直到它被释放;任何线程都可能释放它。

threading.RLock()
一个工厂函数,返回一个新的可重入锁对象。一个可重入锁必须由获得它的线程释放。一个线程一旦获得一个可重入锁,同一个线程可以再次获得它而不会阻塞;线程必须对它每次获得的可重入锁释放一次。

threading.Semaphore([value])
一个工厂函数,返回一个新的信号量对象。一个信号量管理一个计数器,它表示release()调用的数目减去acquire()调用的数目,再加上一个初始值。acquire()方法将会阻塞直到它可以在返回时计数器不是负数。如果没有给出,value默认为1。

threading.BoundedSemaphore([value])
一个工厂函数,返回一个新的有界信号量对象。一个有界信号量会确保它当前的值不超过它的初始值。如果超过,则引发ValueError。在大部分情况下,信号量用于守护有限容量的资源。如果信号量被释放太多次,它是一种有bug的迹象。如果没有给出,value默认为1。

class threading.Thread
表示一个控制线程的类。该类可以用一种有限的方式安全地继承。

class threading.Timer
一个线程,它在一个指定的时间间隔之后执行一个函数。
threading.settrace(func)
为所有从threading模块启动的线程设置一个跟踪函数。在每个线程的run()方法调用之前,func将传递给sys.settrace()。

threading.setprofile(func)
为所有从threading模块启动的线程设置一个profile函数。在每个线程的run()调用之前,func将传递给sys.setprofile()。

threading.stack_size([size])
返回创建新的线程时该线程使用的栈的大小。可选的size参数指定后来创建的线程使用栈的大小,它必须是0(使用平台的或者配置的默认值)或不少于32,768(32kB)的正整数。如果不支持改变线程栈的大小,则引发一个ThreadError。 如果指定的栈的大小不合法,则引发一个ValueError且栈的大小不会改变。32kB是目前支持的最小的栈大小值以保证解释器自己有充足的栈空间。注意,某些平台可能对栈的大小具有特别的限制,例如要求最小的栈大小>32KB或要求分配系统内存页面大小的整数倍 - 更多的信息应该参考平台的文档(通常是4KB的页面;在缺少更多特定信息的情况下栈的大小建议使用4096的整数倍)。可用的平台:Windows、 带有POSIX线程的系统。
exception threading.ThreadError
用于各种线程相关的错误,如下文描述。注意许多接口使用RuntimeError而不用ThreadError。

对于各个模块函数将在之后几篇文章中详细讲述。

原创粉丝点击