从 C++ 使用时,Python 多处理不起作用

标签 python c++ 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 处理。它在不处理“多处理”包时工作得很好,但在尝试启动另一个“进程”时锁定。

是否可以同时使用 Python/C++ 和“多处理”?

谢谢

最佳答案

我不希望它起作用,因为 multiprocessing 在 Windows 上的工作方式(没有 fork)是 CreateProcess 另一个同一可执行文件的拷贝。由于该可执行文件是您的嵌入式 C++ 应用程序,而不是 Python 解释器,您可能必须与其密切合作才能使其正常工作。可以在posix_spawn_win32.py中看到相关代码.

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

关于从 C++ 使用时,Python 多处理不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25103518/

相关文章:

Python Multiprocessing DictProxy 追加到列表字典不起作用

python - 尝试格式化并打印列表中的多个(动态)字典

python - 序列化和反序列化 Django 枚举字段以接受数字和文本表示

c++ - 在 ARM 上编译 ChromeDriver

c++ - 在模板上使用 ()-运算符

python - 使用多处理python将元素添加到列表

python - 木星 SSL : WRONG_VERSION_NUMBER

python - Numpy:在 2D bool 数组中逐项快速计算 True 实例

c++ - 如何在不暂停执行的情况下获取 X 窗口系统中的事件?

memory-management - Celery 中每个任务的 fork 流程