从C++调用时Python多进程不工作
我正在尝试把一个使用了'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中运行得很好,但当嵌入到C++中时,它在.start()的时候卡住了,无法继续。
我使用了所有相关的API调用来确保Python的GIL(全局解释器锁)处理是安全的。当不使用'multiprocessing'包时,一切都运行得不错,但一旦尝试启动另一个'Process',就会卡住。
请问,是否可以同时使用Python/C++混合编程和'multiprocessing'?
谢谢!
1 个回答
1
我不太指望这个能成功,因为在Windows上,multiprocessing
的工作方式是通过CreateProcess
来创建一个相同程序的副本,而不是像在其他系统那样使用fork
。而这个程序是你自己写的C++应用,而不是Python解释器,所以你可能需要和它紧密配合才能让这个工作顺利进行。你可以在posix_spawn_win32.py
中查看相关代码。
另一个可能的问题是,在Windows上,multiprocessing
依赖一个C扩展模块,它在Windows的内核信号量上模拟POSIX信号量。我没有仔细看过这个代码,但这可能会对全局解释器锁(GIL)或线程状态做一些奇怪的事情,或者依赖一些隐藏的机制来与子Python程序共享信号量。