Я использую 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.
Затем я получаю отчет о сбое, скопированный в этот смысл.
Любые предложения по устранению этого?