【发布时间】:2011-02-27 13:48:49
【问题描述】:
我想将 pyGame 程序用作另一个进程的一部分。使用以下代码,pyGame 似乎没有处理事件;它不响应“q”键,也不绘制窗口的标题栏。如果go() 没有作为线程运行,它工作正常。这是在 OSX 下;我不确定这是否是问题所在。
import pygame, threading, random
def go():
pygame.init()
surf = pygame.display.set_mode((640,480))
pygame.fastevent.init()
while True:
e = pygame.fastevent.poll()
if e.type == pygame.KEYDOWN and e.unicode == 'q':
return
surf.set_at((random.randint(0,640), random.randint(0,480)), (255,255,255))
pygame.display.flip()
t = threading.Thread(target=go)
t.start()
t.join()
【问题讨论】:
-
您的代码在我的 (linux) 机器上运行良好。
-
也在我的 linux 机器上运行,似乎是 OSX 特有的问题。
-
仅供参考,Python 有一个 GIL(全局解释器锁),它可以防止真正的线程并行(即,如果您使用线程,它不会使您的代码更快)。
-
在 Mac 上遇到同样的问题,如果不在主线程中完成绘图就不会发生。不是真正的解决方案,而是更多的观察是,如果在主线程中调用 display.flip() 而在另一个线程中完成绘图,屏幕将根据需要进行更新。
标签: python macos multithreading pygame