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 `asyncio`无法使用 #7

Closed lgc2333 closed 7 months ago

lgc2333 commented 1 year ago

异常模块

ScriptEngine (脚本引擎)

操作系统

Windows 11

LiteLoader 版本

2.12.0

BDS 版本

1.19.71.02

发生了什么?

image

复现此问题的步骤

No response

有关的日志/输出

No response

插件列表

No response

lgc2333 commented 1 year ago

image 我测

lgc2333 commented 1 year ago

不行 会假死

image

image

yqs112358 commented 1 year ago

令人难绷,翻了一下Cpy源码发现仍然是GIL的锅。CPython的代码质量实在是有待提高 估计跟threading LiteLDev/ScriptEngine#5 一样,要的CPython3.12发布后才能解决。CPython自身的bug LL这里无法给予修复

callstackexceed commented 1 year ago

asyncio 有自己的事件循环啊…… 如果 asyncio 不能适配的话,我这里可以实现第三方实现的协程,就能适配 LL 了。

yqs112358 commented 1 year ago

asyncio 有自己的事件循环啊…… 如果 asyncio 不能适配的话,我这里可以实现第三方实现的协程,就能适配 LL 了。

是这样,asyncio依赖于py底层的调度算法。LLSE为了实现完善的多引擎隔离重写了这部分调度以及GIL相关的代码,因此与标准库部分设施相不兼容,这也没有办法,因为以py目前相关的机制并不能达到我们需要的目的。 等py3.12更新后,LL将转为使用3.12更新的isolated GIL API来彻底解决此问题。在此之前,欢迎社区自行实现协程来自行实现相关效果。

Mooling0602 commented 2 months ago

asyncio 有自己的事件循环啊…… 如果 asyncio 不能适配的话,我这里可以实现第三方实现的协程,就能适配 LL 了。

是这样,asyncio依赖于py底层的调度算法。LLSE为了实现完善的多引擎隔离重写了这部分调度以及GIL相关的代码,因此与标准库部分设施相不兼容,这也没有办法,因为以py目前相关的机制并不能达到我们需要的目的。 等py3.12更新后,LL将转为使用3.12更新的isolated GIL API来彻底解决此问题。在此之前,欢迎社区自行实现协程来自行实现相关效果。

3.12已经出了吧,有消息吗,想把我的MCDR插件移植过来