python - 多进程和错误进程已 fork ,您无法安全地使用此 CoreFoundation 功能

标签 python macos multiprocessing

调用我的函数 start 并在 Python 2.7.8 上使用多处理模块时出现此错误。我使用的是 Mac OS 10.9.5。

The process has forked and you cannot use this CoreFoundation functionality safely. 
You MUST exec(). Break on __THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_
COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC__() to debug.

这是 Lattice 类下的代码。我的函数 sansfin 运行良好并且返回一个 bool 值,它只需要作为参数 self 和一个整数来循环。
    def start(self):
        if __name__ == '__main__':
            self.run = True
            p = Process(target=self.sansfin, args=(1000,))
            p.start()
            p.join()

    def stop(self):
        self.run = False

我对这个消息很迷茫。我在那里和其他地方没有发现任何有用的东西。有些人建议一个错误...

最佳答案

要修复此错误,您需要显式设置 multiprocessing启动方法到 spawn在 MacOS 上。这可以通过在 if __name__ == '__main__' 正下方添加以下内容来实现.例如:

import platform, multiprocessing
...
if __name__ == '__main__':
    if platform.system() == "Darwin":
        multiprocessing.set_start_method('spawn')
也可以看看:
  • https://groups.google.com/forum/#!topic/psychopy-users/quulKzsQY-Y
  • https://docs.python.org/3/library/multiprocessing.html#contexts-and-start-methods
  • https://bugs.python.org/issue33725
  • 关于python - 多进程和错误进程已 fork ,您无法安全地使用此 CoreFoundation 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30669659/

    相关文章:

    java - Java是否自动优化多核处理器的循环

    python - Pandas 列名打印而不是整个 DataFrame

    Python 字典和多个 dict[]

    python - 如何在 Python 中查找数字是否属于特定范围?

    macos - 使用 Delphi XE2 在 MacOS 应用程序中嵌入 Web 浏览器

    ios - 为来自 iOS 背景的 OS X 开发

    python - 为什么我的 Python 程序总是出现这个标题匹配错误?

    python - 如何使用 python 作为服务器端语言?

    macos - 在菜单当前快速打开时从 NSTimer 动态更新 NSMenuItem?

    python - 如何并行合并两个 Pandas 数据框(多线程或多处理)