Использование модуля многопроцессорности python для ввода-вывода с pygame в Mac OS 10.7

Я использую 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.

Затем я получаю отчет о сбое, скопированный в эту суть .

Есть предложения, как это исправить?

14
задан Mike Lawrence 12 November 2011 в 17:02
поделиться