Mik*_*nce 14 python macos pygame multiprocessing osx-lion
我使用pygame在认知科学中运行实验,并且我经常需要大量I/O,因此我喜欢将这些任务分离到单独的进程(使用多核机器时)以提高代码的性能.但是,我遇到了一些代码可以在我的同事的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
Run Code Online (Sandbox Code Playgroud)
正如代码中所指出的,罪魁祸首似乎是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.
Run Code Online (Sandbox Code Playgroud)
然后我收到一份崩溃报告,复制到这个要点.
有关如何解决此问题的任何建议?
也许您应该在每个分叉(子)进程中初始化 pygame (初始化 SDL-> OpenGL),如示例所示:
import multiprocessing
def f():
import pygame
pygame.init()
while True:
pygame.event.pump()
if __module__ == "__main__"
p = multiprocessing.Process(target=f)
p.start()
import pygame
pygame.init()
while True:
pygame.event.pump()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3352 次 |
| 最近记录: |