Я использую pygame для проведения экспериментов в когнитивной науке, и часто у меня высокие требования к вводу / выводу, поэтому мне нравится разбивать эти задачи на отдельные процессы (при использовании многоядерной машины) для повышения производительности моего кода.Однако я столкнулся со сценарием, когда некоторый код работает на машине Linux моего коллеги (Ubuntu LTS), но не на моем Mac.Ниже приведен код, представляющий минимальный воспроизводимый пример.Мой Mac 2011 Macbook Air работает под управлением 10.7.2 и использует Python по умолчанию 2.7.1.Я попробовал оба pygame, как установлено через предварительно собранный двоичный файл , и затем я попытался после установки SDL и pygame из исходного кода.
import pygame
import multiprocessing
pygame.init()
def f():
while True:
pygame.event.pump() #if this is replaced by pass, this code works
p = multiprocessing.Process(target=f)
p.start()
while True:
pass
Как отмечено в коде, кажется, чтоВиновник ставит pygame.event.pump()
в отдельный процесс.Когда я запускаю это на своем Mac, я сначала печатаю в терминале следующее:
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.
Затем я получаю отчет о сбое, скопированный в this gist .
Есть предложения как это исправить?