我正在开发一个包括Raspberry Pi相机在内的小项目。我在PC上使用多处理来执行各种任务,其中一个是在Pygame窗口中显示图像。我有经理来尽量减少遇到问题的代码。这是主要功能,它只创建一个Game
进程,运行它并等待它结束:
# main.py
from multiprocessing import Manager
import game
with Manager() as manager:
namespace = manager.Namespace()
namespace.done = False
jobs = [
game.Game(namespace),
]
for job in jobs:
job.start()
for job in jobs:
job.join()
以下是Game
类的代码。状态是共享的,因为将有其他进程检查程序是否已完成。
# game.py
import multiprocessing
import pygame
import time
import sys
class Game(multiprocessing.Process):
def __init__(self, the_state):
super(Game, self).__init__()
pygame.init()
self.screen = pygame.display.set_mode((100, 100))
self.state = the_state
def handle_key_events(self):
""" Wrapper for handling key events """
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.state.done = True
return
def run(self):
while True:
self.handle_key_events()
if self.state.done:
print('exiting PyGame thread')
pygame.display.quit()
pygame.quit()
return
现在的行为是它不会在点击Pygame的退出按钮时结束。但是,如果我从pygame.quit()
的{{1}}方法中注释掉Game
行,则会向我显示以下消息:
run
我尝试使用谷歌搜索该错误但收效甚微。我无法摆脱我尝试不应该做的事情的感觉,考虑到Pygame的窗口可能是一个独立的过程。
我很感激有关如何阅读的见解和建议
答案 0 :(得分:0)
正如Blckknght建议的那样,问题是父进程(main.py
)启动了PyGame的窗口,而子进程(game.py
)尝试quit
它。可以通过移动这部分来解决它:
pygame.init()
self.screen = pygame.display.set_mode((100, 100))
进入Game
' run
方法