Python 从os.system()启动游戏时,pygame会冻结
所以我的问题真的很奇怪。我首先初始化随机神经网络(模型),对于循环中的每一个,我启动游戏Python 从os.system()启动游戏时,pygame会冻结,python,multithreading,pygame,Python,Multithreading,Pygame,所以我的问题真的很奇怪。我首先初始化随机神经网络(模型),对于循环中的每一个,我启动游戏run\u game,然后键盘输入,神经网络按下键盘上循环中的一些按钮,它“玩”游戏。问题是当我启动os.system('./game.pyw')程序时,它会冻结在game.pyw文件中的pygame.init()行上,并且不会继续运行(可能是内部的inifnite循环)因为在python中无法阻止一个线程与另一个线程的连接,所以我不知道该怎么做 for model in models: g
run\u game
,然后键盘输入
,神经网络按下键盘上循环中的一些按钮,它“玩”游戏。问题是当我启动os.system('./game.pyw')
程序时,它会冻结在game.pyw
文件中的pygame.init()
行上,并且不会继续运行(可能是内部的inifnite循环)因为在python中无法阻止一个线程与另一个线程的连接,所以我不知道该怎么做
for model in models:
gc.collect()
p1 = threading.Thread(target=run_game,args=())
p2 = threading.Thread(target=keybord_input,args=(model.get_weights(),))
p1.start()
p2.start()
p1.join()
p2.join()
好的,我找到了解决方案,它可以工作3500次迭代,所以我想它是好的
if not pygame.get_init():
pygame.init()
你能出示完整的代码吗?哪些部分是重要的?它大约有900行,99%的时间都可以正常工作,但它在游戏代码中冻结(游戏代码不是我的)你需要先初始化pygame.init,然后再初始化pygame.mixerI我在mixer之前用init()尝试了它,没有用。你尝试过删除init吗?
def keybord_input():
global is_game
while is_game == 1:
//neural network give responses and corresponding buttons are pressed
import pygame, os
from pygame.locals import *
import menu, data
def main():
try:
os.environ["SDL_VIDEO_CENTERED"] = "1"
pygame.mixer.pre_init(44100, -16, 2, 4096)
pygame.init() # problem
pygame.mouse.set_visible(0)
pygame.display.set_icon(pygame.image.load(data.filepath("bowser1.gif")))
pygame.display.set_caption("Super Mario Python")
os.environ['SDL_VIDEO_WINDOW_POS'] = '%i,%i' % (0,0)
os.environ['SDL_VIDEO_CENTERED'] = '0'
screen = pygame.display.set_mode((640, 480))
menu.Menu(screen)
except:
return 0
if not pygame.get_init():
pygame.init()