Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.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 pygame中的多处理合并_Python_Multiprocessing - Fatal编程技术网

Python pygame中的多处理合并

Python pygame中的多处理合并,python,multiprocessing,Python,Multiprocessing,我尝试使用python中的pygame模块创建一个简单的游戏。这是一个两人游戏,所以它需要在同一个pygame屏幕上同时获得输入,或者换句话说,事件。我尝试使用多线程,也就是说,通过运行共享pygame屏幕的两个线程,但由于GIL,它没有工作。因此,当我尝试使用多处理时,我遇到了一个问题,我无法共享同一个pygame屏幕。那么,有没有一种方法可以创建一个具有pygame屏幕的池,就像序列一样?如果没有,有没有其他更好的方法来解决我的问题?如有任何答复,将不胜感激。谢谢。您可能既不需要多线程,也不

我尝试使用python中的pygame模块创建一个简单的游戏。这是一个两人游戏,所以它需要在同一个pygame屏幕上同时获得输入,或者换句话说,事件。我尝试使用多线程,也就是说,通过运行共享pygame屏幕的两个线程,但由于GIL,它没有工作。因此,当我尝试使用多处理时,我遇到了一个问题,我无法共享同一个pygame屏幕。那么,有没有一种方法可以创建一个具有pygame屏幕的池,就像序列一样?如果没有,有没有其他更好的方法来解决我的问题?如有任何答复,将不胜感激。谢谢。

您可能既不需要多线程,也不需要多处理

你所说的“由于GIL而无法工作”是什么意思?尝试执行多线程时是否收到任何错误消息

可以创建一个简单的多线程设计,以便于更新由不同玩家控制的对象,但无论如何都要小心。GIL只会影响你,你真的不会像在你的应用程序中使用一个以上的核心那样有任何好处,但不会给你任何错误

至于使用多处理,第二个进程无论如何都不能使用屏幕表面,并且在进程之间传递表面(图像)通常是不值得的(如果它是可行的话)


我的意思是,当我按下一个按钮,只有一个线程检测到 把钥匙放下。我没有得到任何错误。这是因为吉尔,对吗?我很抱歉 如果我错了

不-这与GIL没有任何关系——它与pygame事件API没有设计成与线程一起工作有关

Pygame中有两种处理按键的方法:要么检查
KEYDOWN
事件,要么调用
Pygame.key.get_pressed
。我通常更喜欢第二个,因为它不依赖于操作系统或BIOS级别的按键自动重复设置(当然,除非这是一个只执行一次的操作,而不是在按键时执行)

无论如何,在任何与pygame相关的项目中,您都应该在代码中的单个位置和同一线程上检查pygame事件(包括按键)。一旦您从“外部世界”获得了所需的信息,您就可以根据需要设置内部变量


但是,由于您不提供任何代码,因此我建议您的多线程代码最直接的修复方法是使用而不是检查事件:它可能在两个线程中都能工作。(多处理代码要复杂得多)。

我的意思是,当我按下一个按钮时,只有一个线程检测到按键按下。我没有得到任何错误。这是因为吉尔,对吗?如果我错了,我很抱歉。另外,你能建议一个更好的方法来接受同时输入吗。与C++中的KBHIT()的Python替代类似吗?谢谢。谢谢。我试试看