LiteLDev / LegacyScriptEngine

A plugin engine for running LLSE plugins on LeviLamina
GNU General Public License v3.0
48 stars 8 forks source link

LLSE Python `threading`模块无法使用 #6

Closed lgc2333 closed 7 months ago

lgc2333 commented 1 year ago

异常模块

ScriptEngine (脚本引擎)

操作系统

Windows 11

LiteLoader 版本

2.12.0

BDS 版本

1.19.71.02

发生了什么?

意料之中

image

CrashLog.zip

复现此问题的步骤

No response

有关的日志/输出

No response

插件列表

No response

lgc2333 commented 1 year ago

假死 image

yqs112358 commented 1 year ago

比较尴尬的是,Python底层关于GIL的各API实现完全没有考虑他自身设计的子解释器的问题。很显然Cpy这里的代码就是依托答辩。 LLSE使用的多引擎机制必须使用子解释器,因此不出意外的话应该不支持threading,以及用到threading的库。另外,原版threading由于GIL存在的缘故,任意时刻只有一个线程可以进入运行状态。因此这个threading是事实上的假多线程,使用threading之后性能甚至比原本的单线程更差。

可以说,在py3.12之前,由于Cpy的底层代码实现问题较大,threading库是完全无法达到正常使用的需求的,因此在实际开发中也强烈不推荐使用此库。目前请使用multiprocess来完成相关需求。

yqs112358 commented 1 year ago

后续Python3.12在子解释器和GIL方面做出了很重要的修复。CPy 3.12将在今年10月份发布,届时LLSE将对其适配。 适配完成之后,多线程性能问题和子解释器问题以及threading支持问题将得到最终的解决。请耐心等待Cpy3.12的发布