2016-09-05 8 views
0

Я работаю над прототипом игры, используя python twisted. Ссылаясь одну из книг, я в настоящее время использую следующий код для обновления игрыЗапрос относительно реактора.doВыберите() и reactor.runUntilCurrent

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“». Я использую скрученный 16.1.1, и следующие вопросы:

1) Я не нашел runUntilCurrent и doSelect методы в документации, приведенной в twistedmatrix, эти методы недоступны?

2) Является ли реактор.iterate() заменой doSelect()? 3) Из более ранних сообщений я обнаружил, что реактор.iterate() может сделать приложение медленным и ошибочным. Каков наилучший способ справиться с ситуациями, когда требуется обновление UI фактов?

ответ

0

Скрученный обычно выбирает реактор эпохи по умолчанию. Функция doSelect доступна в selectreactor. Чтобы использовать выбранный реактор, сначала установите реактор выбора, а затем импортируйте twisted.internet.reactor.

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

Select должен работать на большинстве соответствующих операционных систем, поэтому ваша книга использует его.

1) I didn't find runUntilCurrent and doSelect methods in the documentation given in twistedmatrix

Вы не ищете достаточно трудно родственную: D попробовать поиск через всю modules and class documents в следующий раз.

2) Is reactor.iterate() replacement of doSelect() .

Они оба, похоже, делают что-то подобное, но я не думаю, что они предназначены для замены. Надеюсь, разработчик Twisted core увидит этот вопрос и исправит меня, если я ошибаюсь.