使用C++时,Python多进程无法运行

2024-10-03 11:18:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在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++混合和“多重处理”?在

谢谢


Tags: 脚本executeindexwindowsdefexitfilenamemultiprocessing
1条回答
网友
1楼 · 发布于 2024-10-03 11:18:49

我不希望这样做,因为multiprocessing在Windows上(没有fork)的工作方式是CreateProcess同一可执行文件的另一个副本。由于该可执行文件是嵌入的C++应用程序,而不是Python解释器,所以您可能必须与它进行非常密切的合作才能实现这一工作。您可以在^{}中看到相关代码。

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

相关问题 更多 >