python - 为什么 multiprocessing 会打开多个 pygame 窗口,尽管没有处理任何与 pygame 相关的内容?
问题描述
我正在使用未来将由神经网络引导的蒙特卡罗树搜索来制作国际象棋程序。目前的问题是,尽管我尽了最大努力最大化系统的效率,但引擎仍然需要 3 分钟才能完成搜索所需的 800 场比赛。为了解决这个问题,我尝试在系统中实现一些多处理,以便它可以一次玩多个游戏。
不幸的是,尽管在导入到我的主函数中的单独文件中,多处理仍然使用我的菜单系统打开额外的 pygame 窗口。
这是我的代码的相关部分:
import multiprocessing
import time
import pygame
pygame.init()
screen = pygame.display.set_mode([800, 400])
def play_game():
time.sleep(3)
print("done")
if __name__ == "__main__":
for i in range(3):
game1 = multiprocessing.Process(target=play_game)
game2 = multiprocessing.Process(target=play_game)
game1.start()
game2.start()
game1.join()
game2.join()
我希望这会在开始时打开 pygame 窗口,然后运行 play_games 并单独保留 pygame 代码。但是,它会打开两个额外的窗口,每个进程一个。为什么会这样,我怎样才能阻止它发生?
解决方案
我相信这会遇到与您相同的问题,并且有一个解决方案:
基本上你必须screen = pygame.display.set_mode([800, 400])
进入__main__
以便它只执行一次。
希望这有点帮助!
推荐阅读
- amazon-web-services - AWS AutoScaling CoolDown 组件
- python-3.x - 如何将请求模块中的文件和表单参数传递给requests.request()?
- javascript - 从数组派生无序列表
- php - 如何在注册时将特定电子邮件域列入白名单
- ios - 将 NSSortDescriptor 与多个键和缺失数据一起使用
- spring-boot - JSESSIONID 安全标志-Spring boot 和 Spring Security(SAML)
- slack - Slack 机器人如何找到自己的 id?
- linker - 网站注册号以电话号码链接的形式出现,有没有办法逃脱?
- python - Selenium 的 XPath 问题
- python - 除了在 OpenCV (Python) 中作为坐标提供的多边形之外的遮光图像