当前位置: 首页 > 知识库问答 >
问题:

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

易淳
2023-12-19

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

共有2个答案

微生啸
2023-12-19

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

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

寿高阳
2023-12-19

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

 类似资料:
  • 问题内容: 我需要从我的Python脚本执行该脚本。 可能吗?该脚本会生成一些输出,并写入一些文件。如何访问这些文件?我尝试了子流程调用功能,但没有成功。 应用程序“ bar”还引用了一些库,除了输出外,它还创建了文件“ bar.xml”。我如何访问这些文件?只是通过使用open()? 谢谢, 编辑: Python运行时的错误仅是这一行。 问题答案: 要执行外部程序,请执行以下操作: 是的,假设您

  • 如何在amh上部署 go 或者 python 脚本。应用商店不考虑支持其他编程语言的安装和环境创建吗 应用商店没有搜索到相关的程序

  • goroutine是一个轻量级的线程。 package main import "fmt" func f(from string) { for i := 0; i < 3; i++ { fmt.Println(from, ":", i) } } func main() { // 假设我们有一个函数叫做f(s) // 这里我们使用通常的同步调用来调用函

  • 要杀死进程,我使用Ctrl+z将程序发送到后台后,通过PID杀死它,这是不会被忽略的。为什么Ctrl+C总是被忽略?我如何解决这个问题?

  • 问题内容: 有什么方法可以使用函数打破无限循环吗?例如, 这将导致以下错误: 请说明为什么会发生这种情况以及如何解决。 问题答案: 就我而言,您不能从内部调用break,但是可以使其返回值( 例如:boolean )以停止无限循环 编码:

  • 若要让儿童使用PS Vita,监护人可依个人需要限制可播放的内容或可使用的功能。 此外,PlayStation®Network也准备了在主账号看管下,一定年龄以下的用户可使用的子账号。 详情请参阅「创建PlayStation®Network账号」。 可执行的操作 内容 如何设定限制 限制启动设有年龄限制的应用程序或视频影像等内容 除了[关]以外另有11个等级可设定。根据PS Vita内设定的等级,