Je suis en train de programmer un jeu en utilisant pygame. J'ai l'intention de contrôler l'un des caractères en utilisant OpenSoundControl (OSC), un protocole basé sur udp pour la communication en temps réel. Fondamentalement, j'utilise simpleOSC module pour biund certaines commandes OSC à des fonctions sur mon programme pygame.Pygame et filetage: verrouillé lors de l'accès aux globals?
Ma structure de jeu est quelque chose comme ça (ce qui est une simplification si vous obtenez l'idée):
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()
jeu est une classe simple qui exécute pygame.init() et dessine et fait tout à peu près connexes à pygame. Le problème que j'obtiens en exécutant le code est que quand j'envoie un paquet osc je reçois "Ça marche" mais pas "ne fonctionne pas" et ensuite aucun paquet osc suivant n'est traité. Puisque simpleOSC utilise des threads, ma seule explication à ce comportement est que pygame utilise une sorte de threading incompatible (?) Et qu'il essaye d'accéder à une variable située dans le thread de pygame.
Des idées sur la cause et (si possible) une solution?
En ce moment j'utilise une solution: j'ai piraté le code simpleOSC pour utiliser des sockets non bloquantes et arrêter d'utiliser des threads. C'est une solution laide mais ça marche. Mais j'aimerais en trouver une plus propre. –