如果用 go 或者 rust 来调用 python 脚本能不能突破 gil 限制实现真正的并行执行?

如题最近弄 python 发现性能还是差点意思但项目已经是 python 了但其中的小脚本是不是能用我刚才说的方案呢?

阅读 2.4k
2 个回答

多进程并行,Go的话可以用 os/exec 包来调用外部 Python 脚本。Rust的话可以用 std::process::Command 来调用外部 Python 脚本。 Go 或者 Rust 要和 Python 进程通信,用进程间通信 (IPC) 方法就行。

python的标准库提供了两个模块去实现并行操作,一个是 multiprocessing, 一个是 concurrent.futures.ProcessPoolExecutor, 都支持对进程的创建,数量最大等于你的机器的核心数量,二者都是真正的并行,可以突破GIL的限制,毕竟GIL的限制是单进程下同一时刻仅能一个线程在执行。

当然 go 或者 rust 通过命令行的形式去调用py脚本也可以,但是为啥要这么麻烦?如果你们之间不需要通信,这方式也太费事了吧。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题