저는 파이 게임을 사용하여 게임을 프로그래밍하고 있습니다. 실시간 통신을위한 UDP 기반 프로토콜 인 OpenSoundControl (OSC)을 사용하여 문자 중 하나를 제어하려고합니다. 기본적으로 나는 simpleOSC 모듈을 사용하여 내 파이 게임 프로그램의 일부 OSC 명령에 기능을 부여합니다.파이 게임 및 스레딩 : 전역에 액세스 할 때 잠겨 있습니까?
globalsomething = {}
def handler(*m):
global globalsomething
print "it works"
print globalsomething
print "not working"
if __name__ == "__main__":
osc.init()
osc.listen('', 3333)
osc.bind(handler,'/game/dosmtng')
app = Game()
while True:
app.MainLoop()
게임 pygame.init을 (실행) 및 무 거의 모든 관련 수행하는 간단한 클래스입니다 :
내 게임의 구조는 다음과 같이 (당신이 아이디어를 얻을 수 있도록이가 단순화)입니다 파이 게임으로
코드를 실행할 때 문제는 osc 패킷을 보낼 때 "작동하지만"작동하지 않고 "이후 osc 패킷이 처리되지 않는다는 것입니다.
simpleOSC는 스레드를 사용하기 때문에이 동작에 대한 유일한 설명은 pygame이 일종의 호환되지 않는 스레딩 (?)을 사용하고 pygame의 스레드에있는 변수에 액세스하려고 할 때 잠금을 설정한다는 것입니다.
원인과 해결책 (가능한 경우)에 대한 아이디어가 있으십니까?
현재이 솔루션을 사용 중입니다. 비 차단 소켓을 사용하고 스레드 사용을 중단하기 위해 simpleOSC 코드를 해킹했습니다. 이것은 추한 솔루션이지만 작동합니다. 그러나 나는 더 깨끗한 것을 찾고 싶다. –