是否有解决方法在单独的线程中清空事件队列?

时间:2017-10-22 22:51:07

标签: python multithreading events pygame ipython

我使用一个单独的线程在Ubuntu上调用pygame.event.get()多年没有任何问题。但MacOS抛出异常'NSInternalInconsistencyException', reason: 'nextEventMatchingMask should only be called from the Main Thread!';并且Windows在正常执行几秒钟之后将窗口报告为(Not answering),我假设它具有相同的解释,这意味着Linux不像其他操作系统那样容忍此软件设计。

是否有任何解决方法可以在单独的线程中清空事件队列,或者它是否基本上意味着python 2.7上的pygame 1.9.1根本不能以这种方式工作?

我知道GUI事件通常在主线程中处理,但我的Python lib旨在与ipython一起使用。按照设计,主线程,即用户的ipython单元可能不执行任何操作或CPU贪婪的循环,因此它无法处理pygame.event.get()

1 个答案:

答案 0 :(得分:0)

只能从其他线程发布事件,但事件队列必须在主线程中处理。请参阅 pygame.event 的文档:

<块引用>

[...] 事件子系统应该从主线程调用。 [...]

但是,如果您继续阅读

<块引用>

[...] 如果您想从其他线程将事件发布到队列中,请使用 pygame.fasteventpygame 模块与事件和队列模块进行交互。 [...]

参见pygame.fastevent模块:

<块引用>

pygame.fastevent 是 Bob Pendleton 的 fastevent 库的包装器。它提供了用于多线程环境的快速事件。