Python 3.13 最近刚刚发布,具有一个令人惊叹的新功能,称为“自由线程模式”。当您使用线程时,这对于代码的性能来说是一个很大的改进。本文展示了如何启用此功能(默认情况下不启用)并展示“自由线程模式”对代码性能的影响。
对于 Windows 和 MacOS 用户,只需从 Python 网站下载最新的安装程序即可。当您安装Python时,当您选择“自定义安装”选项时,会有一个启用“自由线程模式”的复选框。
对于 Ubuntu 用户,您可以通过在终端中运行以下命令来启用此功能:
sudo add-apt-repository ppa:deadsnakes sudo apt-get update sudo apt-get install python3.13-nogil
安装包后,您可以使用 python3.13(原始)和 python3.13-nogil 或 python3.13t(免费线程 Python)运行代码。
查看这篇文章,了解有关如何在 Linux 发行版上安装 Python 3.13 实验版的更多详细信息。
要验证您的 Python 是否启用了“自由线程模式”,您可以使用以下命令:
python3.13t -VV Python 3.13.0 experimental free-threading build (main, Oct 8 2024, 08:51:28) [GCC 11.4.0]
让我们看看自由线程模式对下面简单代码的影响:
import sys import threading import time print("Python version : ", sys.version) def worker(): sum = 0 for i in range(10000000): sum += i n_worker = 5 # Single thread start = time.perf_counter() for i in range(n_worker): worker() print("Single Thread: ", time.perf_counter() - start, "seconds") # Multi thread start = time.perf_counter() threads = [] for i in range(n_worker): t = threading.Thread(target=worker) threads.append(t) t.start() for t in threads: t.join() print("Multi Thread: ", time.perf_counter() - start, "seconds")
稍后,我将使用普通 Python(python3.13 二进制文件)和免费线程 Python(pypy3.13t 二进制文件)运行此代码。
首先,使用python3.13运行测试:
python3.13 gil_test.py Python version : 3.13.0 (main, Oct 8 2024, 08:51:28) [GCC 11.4.0] Single Thread: 1.4370562601834536 seconds Multi Thread: 1.3681392602156848 seconds
然后,使用 pypy3.13t 运行测试:
python3.13t gil_test.py Python version : 3.13.0 experimental free-threading build (main, Oct 8 2024, 08:51:28) [GCC 11.4.0] Single Thread: 1.862126287072897 seconds Multi Thread: 0.3931183419190347 seconds
我也尝试使用 python3.11:
python3.11 gil_test.py Python version : 3.11.3 (main, Apr 25 2023, 16:40:23) [GCC 11.3.0] Single Thread: 1.753435204969719 seconds Multi Thread: 1.457715731114149 seconds
Python默认有GIL(Global Interpreter Lock)锁定机制,使得多线程实际上并不是并行的。可以看到单线程的时间处理和多线程类似。
使用python3.11t(自由线程模式),多线程性能比单线程快很多。所以,多线程现在实际上是并行的。
但是,你有没有发现 python3.13t 中的单线程测试比 pypy3.13 慢一点?
我不太明白为什么,所以如果你有任何解释请告诉我。
我认为在python中使用多线程进行并行处理是很好的。但是,如果没有GIL锁定机制,则需要开发人员注意“线程安全”,即。在线程之间共享数据。
此外,我们需要等待库和包更新才能完全支持自由线程模式。这就是为什么现在默认情况下不启用“自由线程模式”的原因之一。但是,我认为这将是未来的一个很好的功能。
以上是PythonGIL 中的自由线程模式已禁用)的详细内容。更多信息请关注PHP中文网其他相关文章!