跨语言问题
多线程
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 对象,则可能会创建跨语言引用循环。任何一种语言的垃圾收集器都无法检测到这样的循环。以避免内存泄漏。要么在循环中的某处使用弱引用,要么在不再需要时手动中断循环。