我尝试在Windows 7 x64下将Python 3.3 x64脚本嵌入到“多处理”到C++代码中。在
简单的脚本如下:
from multiprocessing import Process
def spawnWork(fileName, index):
print("spawnWork: Entry... ")
process = Process(target=execute, args=(fileName, index, ))
process.start()
print("spawnWork: ... Exit.")
def execute(fileName, index):
print("execute: Entry... ")
#Do some long processing
print("execute: ... Exit.")
在Python中可以正常工作,但是当嵌入它时,它会停留在.start()并锁定。在
我使用所有相关的API调用来确保Python的GIL处理安全。它在不处理“multiprocessing”包时工作得很好,但在尝试启动另一个“Process”时会锁定。在
是否可以同时使用Python/C++混合和“多重处理”?在
谢谢
我不希望这样做,因为} 中看到相关代码。
multiprocessing
在Windows上(没有fork
)的工作方式是CreateProcess
同一可执行文件的另一个副本。由于该可执行文件是嵌入的C++应用程序,而不是Python解释器,所以您可能必须与它进行非常密切的合作才能实现这一工作。您可以在^{另一个潜在的问题是在Windows上,
multiprocessing
依赖于一个C扩展模块,它在Windows内核信号量之上伪造POSIX信号量;我还没有通读代码,但这很容易对GIL/threadstate做一些奇怪的事情和/或依赖于隐藏的东西与Python子可执行文件共享信号量。相关问题 更多 >
编程相关推荐