【发布时间】:2021-03-02 20:41:18
【问题描述】:
我的代码是这样的:
import pygame
from multiprocessing import Process, Queue
#dosomething
#dosomething
def keyboard():
keys_pressed = q.get()
if key_pressed[pygame.K_a]:
#dosomething
q = Queue()
keyboard_process = Process(target=keyboard)
keyboard_process.start()
while True:
q.put(pygame.key.get_pressed())
#dosomething
keyboard_process.join()
#dosomething
但是,“q”的值总是[0, 0, ......, 0],即使我按“A”。“keyboard_process.join()”总是什么都不做。所以游戏不工作。
进程如何获取python中全局变量的当前值?请帮帮我。
【问题讨论】:
-
您实际上并没有将队列传递给子进程,将调用更改为
Process(target=keyboard, args=(q, )),当然还有def keyboard(q): -
@Nullman 但这没用。
-
@QWERTY_52_38 我建议不要在 pygame 中使用进程或线程,除非您了解 SDL2 对它们的所有限制。对于您的情况,实际上根本不需要启动新流程。它会使游戏变得更慢、更难调试、更难推理并且更容易出现错误。正如您所注意到的,您将遇到难以解决的问题,例如您的问题中的问题。只需使用事件循环并处理游戏循环中的事件。
标签: python python-3.x process pygame multiprocessing