我正在用 Rust 编写一个游戏,每个玩家都可以向服务器提交一些 python 脚本,以便自动执行游戏中的各种任务。我计划使用pyo3
从 rust 中运行 python。
但是,如果玩家提交这样的脚本,我会看到一个问题:
def on_event(e):
while True:
pass
现在,当服务器调用函数(使用类似的东西PyAny::call1()
)时,线程将在到达无限循环时挂起。
我的第一个想法是一次pyo3
执行 python 一个语句,因此如果脚本运行超过某个阈值则能够退出,但我认为不pyo3
支持这一点。
我的下一个想法是给每个玩家自己的线程来运行他们自己的脚本,这样如果他们的一个脚本卡住了,它只会影响他们的游戏玩法。但是,当线程陷入无限循环时,我仍然遇到无法杀死线程的问题——如果很多玩家提交了刚刚循环的脚本,很多线程将开始使用大量 CPU 时间。
我所需要的只是以某种方式执行 python 脚本,如果其中一个确实循环,它根本不会影响服务器的性能。
谢谢 :)