我正在尝试将带有'multiprocessing'的Python 3.3 x64脚本嵌入到Windows 7 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处理。当不处理“多处理”包时它很好用,但在尝试启动另一个'Process'时锁定。
是否可以同时使用Python / C ++混合和'多处理'?
由于
答案 0 :(得分:1)
我不希望这种情况有效,因为multiprocessing
在Windows上的工作方式(其中没有fork
)是CreateProcess
的另一个副本相同的可执行既然这个可执行文件是你的嵌入式C ++应用程序,而不是Python解释器,你可能必须与它密切合作才能实现这一点。您可以在posix_spawn_win32.py
中看到相关代码。
另一个潜在的问题是,在Windows上,multiprocessing
依赖于一个C扩展模块,该模块在Windows内核信号量之上伪造POSIX信号量;我还没有通读代码,但这可能很容易为GIL / threadstate做一些时髦的事情和/或依赖于封面内容来与子Python可执行文件共享信号量。