查询reactor.doSelect()和reactor.runUntilCurrent

时间:2016-09-05 00:28:09

标签: python twisted

我正在使用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'对象没有属性'doSelect'”。我正在使用twisted 16.1.1,以下是我的问题

1)我没有在twistedmatrix中给出的文档中找到runUntilCurrent和doSelect方法,这些方法不再可用吗?

2)是否更换了didSelect()的reactor.iterate()? 3)从早期的帖子中我发现reactor.iterate()可能使应用程序变慢和错误。处理需要事实UI更新的情况的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

Twisted通常默认选择epoll reactor。 doSelect功能在selectreactor中可用。要使用select reactor,首先安装select reactor然后导入twisted.internet.reactor

from twisted.internet import selectreactor
selectreactor.install()
from twisted.internet import reactor

选择应该适用于大多数相关操作系统,这可能是您的图书使用它的原因。

  

1)我没有在twistedmatrix中给出的文档中找到runUntilCurrent和doSelect方法

你看起来不够配合:D尝试下次搜索所有modules and class documents

  

2)reactor.iterate()取代doSelect()

他们似乎都做了类似的事情,但我认为他们不打算做替补。希望扭曲的核心开发人员会看到这个问题,如果我错了,请纠正我。