2024-06-16 10:09:11 发布
网友
是否可以在独立的C++线程中使用PyRunSimple文件()来运行脚本?你知道吗
我怀疑不是因为吉尔。但如果有什么把戏能让它成为可能,请告诉我。你知道吗
致以最诚挚的问候 雅各布
您可以同时运行它们,但是GIL阻止它们并行运行并充分利用多个CPU核。如果你主要是把其他的长时间运行的C++或CUDA代码重新发布到吉尔,如果你只有几个CPU,这就足够好了。你知道吗
这将是Sub-Interpreters所采用的方法,多个主要独立的python解释器只共享一些部分,但不幸的是,这包括GIL,因此它对并行处理没有好处,而对并发运行的scrip之间的隔离只有很小的好处。这种方法的一个例子是mod_wsgi。你知道吗
子解释器是一个很少使用的特性,所以在C扩展中可能会出现一些奇怪的错误/竞争条件,而这些错误/竞争条件是不可能的。你知道吗
使用CPython,您只能安全地执行多重处理所做的事情。多处理模块避开了GIL的设计问题,只是启动了一个额外的进程,但是如果您有昂贵的共享内存结构,并且没有fork()系统调用,那么这就无法实现。你知道吗
当然,如果您开始攻击python实现本身,就可以将所有全局状态隔离到更小的上下文中。但是如果您这样做了,您最好只使用为这种多线程嵌入用例设计的语言,比如Tcl(请看NaviServer或F5sirules)或Lua。你知道吗
Tcl
Lua
您可以同时运行它们,但是GIL阻止它们并行运行并充分利用多个CPU核。如果你主要是把其他的长时间运行的C++或CUDA代码重新发布到吉尔,如果你只有几个CPU,这就足够好了。你知道吗
这将是Sub-Interpreters所采用的方法,多个主要独立的python解释器只共享一些部分,但不幸的是,这包括GIL,因此它对并行处理没有好处,而对并发运行的scrip之间的隔离只有很小的好处。这种方法的一个例子是mod_wsgi。你知道吗
子解释器是一个很少使用的特性,所以在C扩展中可能会出现一些奇怪的错误/竞争条件,而这些错误/竞争条件是不可能的。你知道吗
<>如果你说C++或java而不是C++,你可以使用IrPython或Jython来实现你的目标,因为那些没有吉尔。你知道吗使用CPython,您只能安全地执行多重处理所做的事情。多处理模块避开了GIL的设计问题,只是启动了一个额外的进程,但是如果您有昂贵的共享内存结构,并且没有fork()系统调用,那么这就无法实现。你知道吗
当然,如果您开始攻击python实现本身,就可以将所有全局状态隔离到更小的上下文中。但是如果您这样做了,您最好只使用为这种多线程嵌入用例设计的语言,比如
Tcl
(请看NaviServer或F5sirules)或Lua
。你知道吗相关问题 更多 >
编程相关推荐