Skip to content
On this page

跨语言问题

多线程

Chaquopy 是线程安全的。但是,由于它基于 CPython(Python 参考实现),因此受到 CPython 的全局解释器锁 (GIL) 的限制。这意味着尽管 Python 代码可以在任意数量的线程上运行,但在任何给定时刻只有一个线程会执行。

GIL 可能是快速连续多次释放和获取它的线程的瓶颈(参见此处的讨论)。如果您的 UI 线程进行许多 Python 调用,而 CPU 绑定的 Python 线程在后台运行,您可以通过将sys.setswitchinterval其默认值 0.005 降低到更低的值(例如 0.001)来提高响应速度。

threading.main_thread将返回启动 Python 的线程。根据您应用的结构,这可能与 Java 中的主线程不同。

也可以看看 Python API 的多线程特性。

内存管理

如果 Python 对象引用直接或间接引用原始 Python 对象的 Java 对象,则可能会创建跨语言引用循环。任何一种语言的垃圾收集器都无法检测到这样的循环。以避免内存泄漏。要么在循环中的某处使用弱引用,要么在不再需要时手动中断循环。

Released under the Creative Commons license.