我正在使用蒙特卡罗树搜索制作一个国际象棋程序,该程序将来将由神经网络指导。目前的问题是,尽管我尽了一切努力来最大限度地提高系统的效率,但引擎仍然需要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代码。但是,它会打开两个额外的窗口,每个进程一个。为什么会发生这种情况?我该如何阻止这种情况的发生?
我相信这会遇到和您相同的问题,并且有一个解决方案:
Python多处理器:在并行执行之前和之后串行执行代码
基本上,您必须将screen = pygame.display.set_mode([800, 400])
移动到__main__
,这样它只执行一次。
希望这能有所帮助!