_thread低级线程API


模块提供了用于处理多个线程(也称为light-weight processestasks)的低级原语 – 多个控制线程共享其全局数据空间。为了同步,提供了简单的锁(也称为mutexesbinary semaphores).threading模块提供了一个更容易使用和更高级别的线程,它构建在该模块之上。

版本3.7中更改:这个模块以前是可选的,现在总是可用的.

这个模块定义了以下常量和函数:

exception _thread.error

引发特定于线程的错误.

更改版本3.3:这是内置的同义词RuntimeError.

_thread.LockType

这是锁定对象的类型.

_thread.start_new_threadfunction, args [, kwargs]

启动一个新线程并返回其标识符。线程使用参数列表function(必须是元组)执行函数args。可选kwargsargument指定关键字参数的字典。当函数返回时,线程将以静默方式退出。当函数以未处理的异常终止时,打印堆栈跟踪,然后线程退出(但其他线程继续运行).

_thread.interrupt_main

提升KeyboardInterrupt主线程中的异常。一个子线程可以使用这个函数来中断主线程.

_thread.exit ()

提起SystemExit例外。如果没有被抓住,这将导致线程无声地退出.

_thread.allocate_lock ()

返回一个新的锁定物体。锁的方法如下所述。锁初始解锁.

_thread.get_ident ()

返回当前线程的’线程标识符’。这是一个非零整数。它的价值没有直接意义;它旨在作为一种神奇的饼干用于例如索引特定于线程的数据的字典。当线程退出并创建另一个线程时,线程标识符可以被回收.

_thread.stack_size ( [size])

返回创建新线程时使用的线程堆栈大小。可选的size参数指定用于随后创建的线程的堆栈大小,并且必须为0(使用平台或配置的默认值)或者至少为32,768(32 KiB)的positiveinteger值。如果未指定size,则使用0。如果不支持更改线程堆栈大小,则引发RuntimeError。如果指定的堆栈大小无效,则引发ValueError并且堆栈大小未经修改。32 KiBis目前是支持的最小堆栈大小值,以保证解释器本身有足够的堆栈空间。注意,一些平台可能对堆栈大小的值具有特定限制,例如要求最小堆栈大小>32 KiB或要求分配系统内存页面大小的倍数 – 平台文档应参考更多信息(4 KiB页面是常见的;在没有更具体信息的情况下,使用4096的倍数表示堆栈大小是建议的方法).

可用性:Windows,带POSIX线程的系统

_thread.TIMEOUT_MAX

timeout Lock.acquire()参数允许的最大值。指定超过此值的超时将会导致OverflowError.

版本3.2.

锁定对象有以下方法:

lock.acquirewaitflag=1, timeout=-1

没有任何可选参数,此方法无条件地获取锁,如果必要等待,直到它被另一个线程释放(一次只有一个线程可以获得一个锁 – 这就是它们存在的原因).

如果整数waitflag参数存在,动作取决于它的值:如果它为零,只有在没有等待的情况下立即获取锁定时才获取锁定,而如果它不为零,则锁定是按照上面的方式获得的.

如果浮点timeout参数存在且为正,则指定返回前的最大等待时间(以秒为单位)。否定timeout参数指定无限制的等待。你不能指定timeout如果waitflag为零.

如果成功获得锁定,则返回值为True,如果没有,则返回False.

在版本3.2:timeout参数是新的.

在版本3.2中更改:锁定获取现在可以被POSIX上的信号打断

lock.release

释放锁定。锁必须是早先获得的,但不一定是由同一个线程获得的.

lock.locked ()

返回锁的状态:True如果它被一些线索收购,False如果没有.

除了这些方法之外,还可以通过with语句使用锁定对象,例如:

import _threada_lock = _thread.allocate_lock()with a_lock:    print("a_lock is locked while this executes")

警告:

  • 线程交互奇怪中断:KeyboardInterrupt异常将由任意线程接收。(当signal模块可用时,中断总是进入主线程。)
  • 调用sys.exit()或抬起SystemExit异常等同于调用_thread.exit().
  • 无法中断锁定上的acquire()方法 – KeyboardInterrupt异常将在获取锁定后发生.
  • 主线程退出时,系统定义是否其他线程生存。在大多数系统中,它们被杀死而不执行tryfinally子句或执行objectdestructors.
  • 主线程退出时,它不执行任何常规清理(除了tryfinally条款很荣幸),标准的I / O文件没有刷新.

评论被关闭。