Я использую pygame для проведения экспериментов в когнитивной науке, и часто у меня большие требования к вводу-выводу, поэтому мне нравится разделять эти задачи на отдельные процессы (при использовании многоядерная машина), чтобы улучшить производительность моего кода. Однако я столкнулся со сценарием, когда некоторый код работает на Linux-машине моего коллеги (Ubuntu LTS), но не на моем Mac. Ниже приведен код, представляющий минимальный воспроизводимый пример. Мой Mac - это Macbook Air 2011 года, работающий под управлением 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.
Затем я получаю отчет о сбое, скопированный в эту суть .
Есть предложения, как это исправить?