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

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

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


回答:

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


回答:

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

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

以上是 如果用 go 或者 rust 来调用 python 脚本能不能突破 gil 限制实现真正的并行执行? 的全部内容, 来源链接: utcz.com/p/939094.html

回到顶部