首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pygame和threading:访问全局变量时被锁定?

Pygame和threading:访问全局变量时被锁定?
EN

Stack Overflow用户
提问于 2010-02-22 20:09:58
回答 1查看 553关注 0票数 1

我正在编写一个使用pygame的游戏。我打算使用OpenSoundControl (OSC)来控制其中一个角色,这是一种基于udp的实时通信协议。基本上,我使用simpleOSC模块将一些OSC命令绑定到我的pygame程序的函数中。

我的游戏结构是这样的(这是一个简化,所以你明白了):

代码语言:javascript
复制
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包时,我得到的是"It works“而不是"not work”,然后没有后续的osc包被处理。

由于simpleOSC使用线程,我对此行为的唯一解释是pygame使用了某种不兼容的线程(?)当试图访问pygame线程中的变量时,它会被锁定。

对于原因和(如果可能的)解决方案有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-02-23 17:24:05

我不能验证你是否真的有线程/并发问题,尽管看起来很有可能。我可以提出一个可能解决这个问题的解决方案。

python多处理模块演示了如何使用队列生成新进程(而不是线程)。如果您创建了新的进程,然后在其中初始化OSC,并且让处理程序在任何时候有东西到达时简单地将消息放在队列上,那么您就可以从主pygame进程轮询队列,以获取传入的任何消息。

它可能比你想的要干净一点,但至少它会让两个模块保持一定的距离,这样它们就不会相互干扰。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2310728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档