# 启用方式 # 1. 使用自由线程二进制 python3.14t script.py # 2. 运行时环境变量 PYTHON_GIL=0 python3.14 script.py PYTHON_GIL=1 python3.14t script.py # 强制启用GIL # 检测运行模式 import sys if hasattr(sys, '_is_gil_enabled'): ft = not sys._is_gil_enabled()
Py_MOD_GIL 或适配后标记 Py_MOD_FREE_THREADED# 启用 JIT PYTHON_JIT=1 python3.14 script.py # 构建时启用 ./configure --enable-experimental-jit
# t-strings 返回 Template 对象 name = "World" t = t"Hello, {name}!" str(t) # "Hello, World!" # 逐段访问(安全SQL/HTML) from string.templatelib import Template, Interpolation for part in t: if isinstance(part, str): ... # 静态文本 else: part.value, part.expr # 插值
# 无需 __future__ annotations! # 前向引用自然工作 class Node: def __init__(self, next: Node|None=None): self.next = next import annotationlib from annotationlib import Format ann = annotationlib.get_annotations( Node, format=Format.VALUE) # VALUE=真实类型, STRING=字符串, FORWARDREF=对象
from __future__ import annotations 已软弃用,直接删除即可!⚡ 类型系统更多变更
# UnionType = Union:| 语法完全统一 print(int | str) # "int | str"(旧: "Union[int, str]") isinstance(int|str, typing.Union) # True! # io.Reader/Writer 替代 typing.IO from io import Reader, Writer # 真正的 Protocol
| 模块 | 用途 |
|---|---|
annotationlib | 注解统一访问 API,三种 Format |
concurrent. | 子解释器真并行,Channel 通信 |
string. | Template / Interpolation 类 |
compression. | Zstandard 压缩(比 gzip 快 3-5x) |
# InterpreterPoolExecutor from concurrent.interpreters import InterpreterPoolExecutor with InterpreterPoolExecutor(max_workers=4) as ex: results = list(ex.map(fn, tasks))
--disable-gil构建自由线程版--with-tail-call-interp尾调用解释器--enable-experimental-jit启用 JITPYTHON_JIT=1运行时启用 JITPYTHON_GIL=0/1运行时控制 GILpython3.14t自由线程可执行文件python -m asyncio ps/pstreeasyncio 任务内省(树形)python -m pdb -p PIDpdb 远程附加python -m jsonJSON 彩色格式化无括号 except PEP 758
try: risky() except ValueError, TypeError: # 无括号! handle() # as 绑定时仍需括号: except (V,T) as e:
finally 控制流警告 PEP 765
# SyntaxWarning: 'return' in finally # 将 return/break/continue 移出 finally
map(strict=True)
from builtins import map list(map(fn, a, b, strict=True)) # 长度不一致抛 ValueError
NotImplemented TypeError
# 布尔上下文使用 NotImplemented → TypeError # 正确写法: if result is NotImplemented: return NotImplemented
float.from_number()
float.from_number(3) # 3.0 float.from_number(10**400) # OverflowError
operator 新函数
from operator import is_none, is_not_none list(filter(is_not_none, items))
UUID v6/v7/v8 RFC 9562
import uuid uid = uuid.uuid7() # 时间排序,适合DB主键 uuid.NIL, uuid.MAX # 常量
ps/pstree CLI、capture/print_call_graph、create_task(kwargs=...)、自由线程、双向链表InterpreterPoolExecutor、forkserver 默认、terminate/kill_workers()Path.copy/move、Path.info 缓存-p PID、async 支持suggest_on_errorannotation_format、unquote_annotations、ispackage()python -m json 彩色 CLI、错误路径注释assertHasAttr/IsSubclass/StartsWith/EndsWithheapify_max/heappop_max 等大顶堆函数QueueListener 支持 with 语句| 3.13 及之前 | 3.14 状态 | 替代方案 |
|---|---|---|
from __future__ import annotations | 软弃用 | 直接删除(PEP 649 默认启用) |
codecs.open() | 弃用 | open(encoding=...) |
argparse.FileType | 弃用 | pathlib.Path + open() |
os.popen/spawn*() | 软弃用 | subprocess |
asyncio.ChildWatcher | 移除 | 不再需要 |
ast.Num/Str | 移除 | ast.Constant |
urllib.URLopener | 移除 | urllib.request.urlopen |
Py_HUGE_VAL(C API) | 移除 | C99 HUGE_VAL |
Py_IS_NAN/INFINITY | 移除 | C99 isnan/isinf |
obj->ob_refcnt(Limited API) | 不透明化 | Py_REFCNT/Py_SET_REFCNT |
fork 改为 forkserver(Linux);增量 GC 在 3.14.5 回退为分代 GC。| 操作 | 安全 |
|---|---|
d[key], key in d | ✅ 无锁读 |
d[key] = v | ✅ 关键区段 |
lst.append(x) | ✅ 关键区段 |
lst[i] | ✅ |
counter += 1 | ❌ 需锁 |
if k in d: d[k] | ❌ TOCTOU |
| 不可变对象读取 | ✅ |
# C 扩展关键区段
Py_BEGIN_CRITICAL_SECTION(self);
self->value = new_val;
Py_END_CRITICAL_SECTION();
PyInitConfig 统一初始化PyLong_Export/FreeExport 零拷贝整数Py_NewRef / Py_XNewRefPyObject_GetOptionalAttrPy_Is(a, b)PyUnicode_EqualToUTF8| 文件 | 功能 |
|---|---|
Python/ceval.c | 解释器循环 |
Python/qsbr.c | QSBR 无锁回收 |
Python/jit.c | Copy-Patch JIT |
Python/optimizer.c | Tier 2 uop 优化 |
Objects/dictobject.c | 字典实现 |
Grammar/python.gram | PEG 语法定义 |
InternalDocs/ | qsbr.md · jit.md |