- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在重新表述我的问题,因为我认为很多人认为这是“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/
我已经配置了我的环境,以便我可以将适当制作的 .png 文件加载到如下定义的图像中: boost::gil::rgb8_image_t input; 但是我如何加载任何典型类型的 pn
我已经配置了我的环境,以便我可以将适当制作的 .png 文件加载到如下定义的图像中: boost::gil::rgb8_image_t input; 但是我如何加载任何典型类型的 pn
它本质上是这个问题的延伸 - Usage of threadpoolexecutor in conjunction with cython's nogil 在这种情况下,我的 getArea2() 方
我意识到写信给 gil::color_converted_view不影响底层 View 的数据。我想知道这是否正确? 例如,假设我想编写一个程序,获取红色 channel 的值并将蓝色 channel
我有一个 Python 程序,因为它太大了,这里是它的源代码的链接: Link 当我在 Mac 上运行它时,有时会遇到这个奇怪的异常: Fatal Python error: PyEval_Resto
Wikipedia文章Global interpreter lock指示Raku具有全局解释器锁。 这与Curtis Poe's response到Are any companies planning
如果一个线程正在等待阻塞 I/O,Ruby 互斥体是否允许两个线程同时执行? 这是我对 GIL 如何用于 MRI 的理解。我很好奇互斥锁和 GIL 之间有什么区别吗? 最佳答案 是的,这有效。正因为如
我不太确定GIL是如何实现的,但理论上,如果我使用pyinstaller将python脚本编译成exe ,还会实现GIL吗?有什么办法可以绕过这个吗? 最佳答案 如果您使用 CPython(“标准 P
我将 Python 3.2 嵌入到 C++ 应用程序中,并且我有几个在程序中不同时间运行的子解释器(由 Py_NewInterpreter 创建)。他们在不同时间获取和释放 GIL,但当我想销毁其中一
阅读各种解释 GIS 和 Python 线程的文章后,Are locks unnecessary in multi-threaded Python code because of the GIL?这是
有没有办法剖析 python 进程对 GIL 的使用情况?基本上,我想知道持有 GIL 的时间百分比。该进程是单线程的。 我的动机是我有一些用 Cython 编写的代码,它使用 nogil。理想情况下
我正在重新表述我的问题,因为我认为很多人认为这是“Python 有线程吗”的问题。确实如此,但 CPython 也有 GIL,它在任何给定时间都不会调度多个线程。这使得 CPython 线程对于 CP
我想将我的单线程应用程序与工作线程数分开。只有 1 个问题 - 这个 Action 的表现如何?如果 GIL 阻止 python 同时执行超过 1 个线程,我会有任何 yield 吗? 另一点(从 c
在 python 中,我定义了一个全局变量,它被不同的线程读取/递增。由于 GIL,如果不使用任何类型的锁定机制,这是否会导致问题? 最佳答案 GIL 只要求解释器在另一个线程接管之前完全执行单个字节
假设我有一个线程和程序的主要部分。由于 GIL,一个线程应该一次工作(而不是同时工作)吗?但是,如果其中一个线程是一个无限循环(或两者都是无限循环)怎么办? 这两个进程会并行运行吗? def test
我正在阅读有关 GIL 的内容,但它从未真正指定它是否包含主线程(我假设是这样)。我问的原因是因为我有一个带有修改字典的线程设置的程序。主线程根据玩家输入添加/删除,而线程循环数据更新和更改数据。 然
我试图找到一个函数来告诉我当前线程是否具有全局解释器锁。 Python/C-API 文档似乎没有包含这样的函数。 我目前的解决方案是使用 PyGILState_Ensure() 获取锁,然后使用 Py
CPython 使用 Global Interpreter Lock . Linux 已删除 Big Kernel Lock 的所有痕迹.这些锁的替代品是什么?一个系统如何才能充分利用一个真正的多核或
CPU-bound(计算密集型) 和I/O bound(I/O密集型) 计算密集型任务(CPU-bound) 的特点是要进行大量的计算,占据着主要的任务,消耗CPU资源,一直处于满负荷状态。比如复
我的部分工作需要大量计算,但它们通常相当简单,原则上可以很容易地与 Cython 的 prange 并行完成,需要 nogil。但是,鉴于我尝试编写 Cython 代码,重点是将 cdef 类作为构建
我是一名优秀的程序员,十分优秀!