gpt4 book ai didi

python - 同时运行嵌入在 C++ 中的 python 脚本

转载 作者:行者123 更新时间:2023-11-30 01:41:31 25 4
gpt4 key购买 nike

是否可以运行脚本,即。在单独的 C++ 线程中使用 PyRun_SimpleFile(),以便它们同时运行?

我怀疑不是因为 GIL。但如果有任何技巧可以实现,请告诉。

最好的问候雅各布

最佳答案

您可以同时运行它们,但 GIL 会阻止它们并行运行并充分利用您的多个 CPU 内核。如果您主要分派(dispatch)给其他长时间运行的 C++/CUDA 代码再次释放 GIL,并且您只有几个 CPU,那么这就足够了。

这将是 Sub-Interpreters 采取的方法,多个主要独立的 python 解释器,它们只共享某些部分,但遗憾的是,这包括 GIL,因此它不会为并行处理带来任何好处,并且对于并发运行的 scrips 之间的隔离也只有很小的好处。这种方法的一个例子是 mod_wsgi .

子解释器是一个很少使用的功能,因此在 C 扩展中会出现奇怪的错误/竞争条件,而这些错误/竞争条件并不期望它们。

如果您说 C# 或 Java 而不是 C++,您可以使用 IronPython 或 Jython 来实现您的目标,因为它们没有 GIL。

使用 CPython,你只能安全地做多进程做的事情。多处理模块回避了 GIL 的设计问题,只是启动了一个额外的进程,但是如果您有昂贵的共享内存结构并且没有 fork() 系统调用,那么这将无法交付。

当然,如果您开始破解 python 实现本身,您可能能够将所有全局状态隔离到更小的上下文中。但如果你这样做,你也可以使用专为这种多线程嵌入用例设计的语言,如 Tcl(查看 NaviServer 或 F5s irules )或 Lua

关于python - 同时运行嵌入在 C++ 中的 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41209471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com