Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从os.system()启动游戏时,pygame会冻结_Python_Multithreading_Pygame - Fatal编程技术网

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()