从C ++使用时,Python多处理无法正常工作

时间:2014-08-03 09:52:24

标签: python c++ multiprocessing

我正在尝试将带有'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 ++混合和'多处理'?

由于

1 个答案:

答案 0 :(得分:1)

我不希望这种情况有效,因为multiprocessing在Windows上的工作方式(其中没有fork)是CreateProcess的另一个副本相同的可执行既然这个可执行文件是你的嵌入式C ++应用程序,而不是Python解释器,你可能必须与它密切合作才能实现这一点。您可以在posix_spawn_win32.py中看到相关代码。

另一个潜在的问题是,在Windows上,multiprocessing依赖于一个C扩展模块,该模块在Windows内核信号量之上伪造POSIX信号量;我还没有通读代码,但这可能很容易为GIL / threadstate做一些时髦的事情和/或依赖于封面内容来与子Python可执行文件共享信号量。