是否可以在 C 模块中使用 Python 线程来实现真正的并行性?



我用C写了一个使用线程的扩展。为了尽量保持交叉平台,我在与并行性相关的特定于平台的函数周围使用了 Apache Portable Runtime 包装器。 但是,为Windows用户安装此类软件包将非常痛苦。 我的另一个担忧是,我真的不需要整个 APR 库,只需要处理线程的部分。

在我开始做这个项目之前,我考虑了不同的库来完成这个任务,在研究 Python 的线程实现时,我能找到的所有导出的 API 都在处理 GIL。原则上,我可以创建线程对象,并让它们运行 C 函数来完成工作,但是,我想知道这是否有意义? Python 线程是否映射到底层操作系统线程(例如,在 Linux 的情况下,pthreads库),或者它们基本上是asyncio的原型,它们不并行执行任何工作(可能只是并行等待)? 我找到的唯一导出的 API 是与PyThreadState相关的函数集。 我可以在源代码中看到pthreads和 NT 线程的 Python 包装器,但它们似乎不可用于扩展。 还是我错过了什么?

只要你在 C 中长时间运行的任务不访问 python 对象,这样它们就可以释放 GIL,那么用 Python 线程包装你的 C 代码是有意义的:

调用系统 I/O 函数是最常见的发布用例 GIL,但在调用长时间运行之前它也很有用 不需要访问 Python 对象的计算

https://docs.python.org/3/c-api/init.html#thread-state-and-the-global-interpreter-lock

最新更新