上一话题

就业培训     下载中心     Wiki     联络
登录   注册

Log
  1. 首页
  2. Python 3.12.4
  3. 索引
  4. 模块
  5. 下一
  6. 上一
  7. Python 标准库
  8. 并发执行
  9. _thread — 低级线程 API

_thread — 低级线程 API ¶


此模块提供用于处理多个线程的低级原语 (也称 轻量进程 or tasks ) — 多个控制线程共享其全局数据空间。对于同步而言,简单锁 (也称 mutexes or 二进制信号量 ) 被提供。 threading 模块提供构建于此模块之上,更易于使用且更高级的线程 API。

3.7 版改变: 此模块曾经是可选的,现在始终可用。

此模块定义以下常量和函数:

exception _thread. error ¶

引发特定线程错误。

3.3 版改变: 这现在是同义词内置 RuntimeError .

_thread. LockType ¶

这是锁对象的类型。

_thread. start_new_thread ( function , args [ , kwargs ] ) ¶

启动新线程并返回其标识符。线程执行函数 function 采用自变量列表 args (其必须是元组)。可选 kwargs 自变量指定关键词自变量字典。

当函数返回时,线程默默退出。

当函数以未处理异常终止时, sys.unraisablehook() 被调用以处理异常。 object 属性对于挂钩自变量是 function 。默认情况下,打印堆栈跟踪,然后退出线程 (但其它线程继续运行)。

当函数引发 SystemExit 异常,它被默默忽略。

引发 审计事件 _thread.start_new_thread 采用自变量 function , args , kwargs .

3.8 版改变: sys.unraisablehook() 现在用于处理未处理异常。

_thread. interrupt_main ( signum = signal.SIGINT , / ) ¶

模拟信号抵达主线程的效果。线程可以使用此函数来中断主线程,尽管立即发生中断没有保证。

若给定, signum 是要模拟的信号编号。若 signum 未给定, signal.SIGINT 被模拟。

若给定信号未被 Python 所处理 (被设为 signal.SIG_DFL or signal.SIG_IGN ),此函数什么都不做。

3.10 版改变: The signum 自变量被添加到定制信号编号。

注意

这不发射相应信号,但调度关联处理程序的调用 (若它存在的话)。若想要真正发射信号,使用 signal.raise_signal() .

_thread. exit ( ) ¶

引发 SystemExit 异常。若未被捕获,这将导致线程默默退出。

_thread. allocate_lock ( ) ¶

返回新的锁对象。锁方法的描述如下。锁最初是解锁的。

_thread. get_ident ( ) ¶

返回当前线程的 "线程标识符"。这是非 0 整数。它的值没有直接意义;旨在作为魔法 Cookie 使用 (如:索引特定线程数据的字典)。线程标识符会被回收,当退出线程并创建另一线程时。

_thread. get_native_id ( ) ¶

返回由内核赋值的当前线程的本机整形线程 ID。这是非负整数。可以使用它的值唯一标识系统范围内的此特定线程 (直到线程终止,之后 OS 会回收该值)。

可用性 :Windows、FreeBSD、Linux、macOS、OpenBSD、NetBSD、AIX、DragonFlyBSD。

Added in version 3.8.

_thread. stack_size ( [ size ] ) ¶

返回创建新线程时使用的线程堆栈大小。可选 size 自变量指定用于随后创建线程的堆栈大小,且必须为 0 (使用平台或配置默认的) 或至少 32,768 (32 KB) 的正整数值。若 size 未指定,使用 0。若不支持改变线程堆栈大小, RuntimeError 被引发。若指定堆栈大小无效, ValueError 被引发且未修改堆栈大小。32 KB 是目前支持的最小堆栈大小值,以保证解释器本身堆栈空间足够。注意,某些平台可能对堆栈大小值有特定限制,譬如要求最小堆栈大小 > 32KB 或要求按系统内存页面大小的倍数分配 - 要了解更多信息请参考平台文档编制 (4KB 页面很常见;建议堆栈大小使用 4096 的倍数方式,当缺乏更具体信息时)。

可用性 :Windows、PThreads。

支持 POSIX 线程的 Unix 平台。

_thread. TIMEOUT_MAX ¶

最大允许值为 timeout 参数对于 Lock.acquire 。指定大于此值的超时将引发 OverflowError .

Added in version 3.2.

锁对象拥有下列方法:

lock. acquire ( blocking = True , timeout = -1 ) ¶

当没有任何可选自变量时,此方法无条件获得锁,若有必要,等待被另一线程释放 (每次仅一线程可以获得锁 — 这是它们存在的原因)。

若 blocking argument is present, the action depends on its value: if it is false, the lock is only acquired if it can be acquired immediately without waiting, while if it is true, the lock is acquired unconditionally as above.

若浮点 timeout 自变量存在且为正值,指定返回前的最大等待时间 (以秒为单位)。负值 timeout 自变量指定无界等待。不可以指定 timeout if blocking 为 False。

返回值为 True 若成功获取锁, False 若不。

3.2 版改变: The timeout 参数是新增的。

3.2 版改变: 现在可以通过 POSIX 信号中断锁获得。

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")
													

告诫:

  • 线程与中断的交互很奇怪: KeyboardInterrupt 异常会被任意线程收到。(当 signal 模块可用,中断始终转到主线程)

  • 调用 sys.exit() 或引发 SystemExit 异常相当于调用 _thread.exit() .

  • 它是不可能的,中断 acquire() 方法在锁 — KeyboardInterrupt 异常将在已获得锁之后发生。

  • 当主线程退出时,系统定义其它线程是否幸存。在大多数系统,杀除它们不执行 try … finally 子句或执行对象析构函数。

  • 当主线程退出时,通常不做任何清理 (除了 try … finally 子句被承兑),且不刷新标准 I/O 文件。

上一话题

contextvars — 上下文变量

下一话题

网络和进程间通信

本页

  • 报告 Bug
  • 展示源

快速搜索

键入搜索术语或模块、类、函数名称。

  1. 首页
  2. Python 3.12.4
  3. 索引
  4. 模块
  5. 下一
  6. 上一
  7. Python 标准库
  8. 并发执行
  9. _thread — 低级线程 API

版权所有  © 2014-2026 乐数软件    

工业和信息化部: 粤ICP备14079481号-1