_thread
— 线程
该模块提供了用于处理多个线程(也称为轻量级进程或任务)的低级原语 - 多个控制线程共享其全局数据空间。为 了同步,提供了简单的锁(也称为互斥锁或二进制信号量)。
发生线程特定错误时,会RuntimeError引发异常。
快速使用示例:
import _thread
import time
def th_func(delay, id):
while True:
time.sleep(delay)
print('Running thread %d' % id)
for i in range(2):
_thread.start_new_thread(th_func, (i + 1, i))
方法
- _thread.start_new_thread(function,args [,kwargs])
启动一个新线程并返回其标识符。线程使用参数列表args(必须是元组)执行函数。可选kwargs参数指定关键字参数的字典。 当函数返回时,线程将以静默方式退出。当函数以未处理的异常终止时,将打印堆栈跟踪,然后线程退出(但其他线程继续运行)。
- _thread.exit()
引发 SystemExit 异常。如果未捕获时,这将导致线程以静默方式退出。
- _thread.allocate_lock()
返回一个新的锁定对象。锁的方法如下所述。锁最初为解锁状态。
- _thread.get_ident()
返回thread identifier当前线程。这是一个非零整数。它的价值没有直接意义; 它旨在用作例如索引线程特定数据的字典的魔术cookie。当线程退出并创建另一个线程时,可以回收线程标识符。
- _thread.stack_size([size])
返回创建新线程时使用的线程堆栈大小(以字节为单位)。可选的size参数指定用于后续创建的线程的堆栈大小,并且必须是0(使用平台或配置的默认值)或至少为4096(4KiB)的正整数值。 4KiB是目前支持的最小堆栈大小值,以保证解释器本身有足够的堆栈空间。
Lock 类
- class Lock
Python提供的线程模块包含一个易于实现的锁定机制,可以实现线程之间的同步。通过调用Lock()方法创建一个新锁。 新锁对象的获取(阻塞)方法用于强制线程同步运行。可选的阻塞参数使您可以控制线程是否等待获取锁定。
方法
锁定对象具有以下方法:
- lock.acquire(waitflag = 1,timeout = -1)
在没有任何可选参数的情况下,此方法无条件地获取锁定,如果有必要,等待它被另一个线程释放(一次只有一个线程可以获取锁定 - 这就是它们存在的原因)。
如果存在整数 waitflag
参数,则操作取决于其值:如果它为零,则仅在不等待的情况下立即获取锁定时获取锁定,而如果它非零,则如上所述无条件地获取锁定。
如果浮点超时参数存在且为正,则它指定返回之前的最长等待时间(以秒为单位)。负超时参数指定无限制等待。如果 waitflag
为零,则无法指定超时。
True
如果成功获取锁定则返回值,否则返回值 False
。
- lock.release()
释放锁定。必须先获取锁,但不一定是同一个线程。
- lock.locked()
返回锁的状态:True表示被某个线程获取,False则表示没有。
除了这些方法之外,还可以通过with语句使用锁定对象,例如:
import _thread
a_lock = _thread.allocate_lock()
with a_lock:
print("a_lock is locked while this executes")