Я программирую игру, используя pygame. Я намерен управлять одним из персонажей, используя OpenSoundControl (OSC), протокол на основе udp для связи в реальном времени. В основном я использую модуль simpleOSC , чтобы связать некоторые команды OSC с функциями моей программы pygame.
Моя структура игры примерно такая (это упрощение, поэтому вы поняли):
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()
Game - это простой класс, который выполняет pygame.init (), рисует и выполняет почти все, что связано с pygame.
Проблема, возникающая при выполнении кода, заключается в том, что при отправке пакета osc я получаю сообщение "Это работает", но не "не работает", и затем никакие последующие пакеты osc не обрабатываются.
Поскольку simpleOSC использует потоки, мое единственное объяснение этого поведения состоит в том, что pygame использует какую-то несовместимую многопоточность (?) И при попытке доступа к переменной, расположенной в потоке pygame, блокируется.
Есть идеи о причине и (если возможно) решении?