Python Pygame:高CPU负载上缺少事件

Python Pygame:高CPU负载上缺少事件,python,python-2.7,events,pygame,mouseevent,Python,Python 2.7,Events,Pygame,Mouseevent,我正在用pygame开发一个图形应用程序,包括一些视频计算和鼠标事件监听。我用的是覆盆子3,覆盆子杰西和蟒蛇2.7 正如标题所说:我丢失了一些鼠标事件,特别是在CPU负载很高的情况下。我设法在这个小例子中重现了这种行为: import pygame import time pygame.init() pygame.display.set_caption('Crash!') window = pygame.display.set_mode((300, 300)) running = True Re

我正在用pygame开发一个图形应用程序,包括一些视频计算和鼠标事件监听。我用的是覆盆子3,覆盆子杰西和蟒蛇2.7

正如标题所说:我丢失了一些鼠标事件,特别是在CPU负载很高的情况下。我设法在这个小例子中重现了这种行为:

import pygame
import time
pygame.init()
pygame.display.set_caption('Crash!')
window = pygame.display.set_mode((300, 300))
running = True
Rectplace = pygame.draw.rect(window, (255, 0, 0),(100, 100, 100, 100))
pygame.display.update()
while running:
    time.sleep(0.1)
    for event in pygame.event.get():
        print(`event`)
        if event.type == pygame.QUIT:
            running = False
运行此脚本时,大多数鼠标滚轮事件(按钮4和5)在快速滚动中被丢弃。删除模拟CPU负载的
time.sleep(0.1)
,使事件侦听器非常可靠

由于我不能删除计算速度慢的部分,也不能对其进行更多优化,我应该怎么做才能恢复这些事件


谢谢分享你的智慧

我猜pygame使用有限大小的循环事件队列。满时,每个新事件将替换最旧的事件。如果你得到的事件比你能处理的要多,那么就让它们去吧,因为你无论如何都要丢弃它们

如果您有零星的慢速计算,因此追赶可能是可行的,那么您必须在足够短的时间内将计算分解为多个部分,以便在默认队列满之前获得事件。当你得到它们时,要么立即处理,要么放入一个更大的追赶队列。最好的方法取决于代码的细节


或者研究建议的线程解决方案。

线程和事件队列?