从C++调用时Python多进程不工作

0 投票
1 回答
1440 浏览
提问于 2025-04-18 15:48

我正在尝试把一个使用了'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程序共享信号量。

撰写回答