首页 > 解决方案 > 为什么 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 代码。但是,它会打开两个额外的窗口,每个进程一个。为什么会这样,我怎样才能阻止它发生?

标签: pythonpygamemultiprocessing

解决方案


我相信这会遇到与您相同的问题,并且有一个解决方案:

Python多处理:在并行执行之前和之后串行执行代码

基本上你必须screen = pygame.display.set_mode([800, 400])进入__main__以便它只执行一次。

希望这有点帮助!


推荐阅读