gpt4 book ai didi

Python 线程并行化逃离 GIL

转载 作者:太空宇宙 更新时间:2023-11-03 14:34:02 26 4
gpt4 key购买 nike

我正在重新表述我的问题,因为我认为很多人认为这是“Python 有线程吗”的问题。确实如此,但 CPython 也有 GIL,它在任何给定时间都不会调度多个线程。这使得 CPython 线程对于 CPU 密集型计算毫无用处。

我需要使用线程;由于 IPC 成本(我有很大的共享对象),进程并行性对我不起作用。

我目前正在将 Jython(无 GIL)与 JyNI 一起使用,以便我可以使用 numpy。 JyNI 是 alpha,但它现在支持 numpy。我让这个工作。然而,JyNI 还处于 alpha 阶段,还存在 bug,整个过程很慢。

我读过一堆旧线程。我想知道从那时起是否有可行的选择?我被迫使用 python 2.7。

谢谢。

最佳答案

目前,Jython 仍然比 CPython 慢很多。根据程序以及 JIT 对其优化程度的不同,多线程可能会也可能不会获得返回。 Jython 的主要设计目标是兼容性,然后是性能。它主要用于粘合代码,在效率提升方面仍有很大潜力。参见例如zippy 在 Java 中实现了极快的 Python 实现,但它是实验性的并且缺乏 Jython 的兼容性级别。在某种程度上,这代表了相反的设计目标。

现在将 JyNI 添加到 Jython 并不会使其更快,但到目前为止,我发现 JyNI 中的性能优化还为时过早,而且通常 Jython 部分无论如何都会主导运行时。另外,例如对于 NumPy, native 数字工作负载在很大程度上主导了粘合代码成本。

最后,请注意 JyNI 必须在 C 端模拟 GIL。详情请查看论文https://arxiv.org/abs/1607.00825 。也许可以在没有 GIL 的情况下操作某些扩展 - 这取决于实现细节、扩展对此的敏感程度。目前C端GIL是强制的。这就是为什么在使用 NumPy 时您可能无法从 Java 多线程中受益。 C 扩展可以选择显式释放 GIL,例如在不与解释器交互的计算密集型操作期间。我不知道 NumPy 是否利用了这一点。

JyNI is alpha and buggy

请确保在问题跟踪器上报告错误。

关于Python 线程并行化逃离 GIL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47090816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com