Это так сломано, надеюсь, вы милостивы ко мне:
reactor.callLater(0, myFunction, parameter1).addCallback(reactor.stop)
reactor.run()
myFunction
возвращает deferred.
Надеюсь, ясно, что я хочу сделать:
myFunction
. Вот почему я использую 0 в качестве параметра задержки. Нет другого выхода, кроме callLater? Забавно передать ему задержку 0. myFunction
выполнит задачу. Проблемы, которые у меня есть до сих пор:
AttributeError: экземпляр DelayedCall не имеет атрибута addCallback
. Справедливо! Как мне поместить обратный вызов в цепочку обратных вызовов, начатую myFunction
тогда? исключения. ТипError: stop () принимает ровно 1 аргумент (2 задано)
. Для решения второй проблемы мне пришлось определить специальную функцию:
def stopReactor(result):
gd.log.info( 'Result: %s' % result)
gd.log.info( 'Stopping reactor immediatelly' )
reactor.stop()
И изменить код на:
reactor.callLater(0, myFunction, parameter1).addCallback(stopReactor)
reactor.run()
(все еще не работает из-за проблемы callLater, но stopReactor
теперь будет работать)
Неужели нет другого способа вызвать Reaction.stop
, кроме как путем определения дополнительной функции?