我正在开发一个使用python twisted的游戏原型。参考其中一本书,我目前正在使用以下代码来更新游戏
def iterate(self):
now = time.time()
interval = now - self.beginFrame
self.beginFrame = now
# update the network
reactor.runUntilCurrent()
reactor.doSelect(0)
# update the games
for game in self.games:
game.update(interval) 然而,上面的代码在ubuntu机器上失败,并出现错误"AttributeError:'EPollReactor‘object has no attribute 'doSelect'“。我使用的是twisted 16.1.1,以下是我的问题
1)我在twistedmatrix中给出的文档中没有找到runUntilCurrent和doSelect方法,这些方法不再可用了吗?
2) reactor.iterate()会取代doSelect()吗? 3)在之前的帖子中,我发现reactor.iterate()可能会使应用程序变慢并出现错误。处理需要fact UI更新的情况的最佳方法是什么?
发布于 2016-09-05 11:19:27
Twisted通常默认选择epoll反应器。selectreactor中提供了doSelect功能。要使用选择的反应器,请首先安装选择的反应器,然后导入twisted.internet.reactor。
from twisted.internet import selectreactor
selectreactor.install()
from twisted.internet import reactorSelect应该可以在大多数相关的操作系统上运行,这可能是你的书使用它的原因。
1)我在twistedmatrix中给出的文档中没有找到runUntilCurrent和doSelect方法
你找得不够仔细,伙伴:下次我试着把所有的modules and class documents都找遍。
2)是
reactor.iterate()对doSelect()的替代。
他们似乎都做了类似的事情,但我认为他们并不打算成为替代品。希望Twisted核心开发人员能看到这个问题,如果我错了,可以纠正我。
https://stackoverflow.com/questions/39322614
复制相似问题