Это так сломано, надеюсь, вы со мной милостивы:
reactor.callLater(0, myFunction, parameter1).addCallback(reactor.stop)
reactor.run()
myFunction
возвращает отложенную.
Я надеюсь, что это ясно, что я хочу сделать:
- Как только работает реактор, я хочу позвонить
myFunction
. Вот почему я использую 0 в качестве параметра задержки. Нет другого способа, кроме callLater? Это выглядит смешно, чтобы передать ему задержку 0. - Я хочу остановить реактор, как только
myFunction
выполнит задачу.
Проблемы, которые у меня есть до сих пор:
-
AttributeError: DelayedCall instance has no attribute 'addCallback'
. Справедливо! Как поместить обратный вызов в цепочку обратного вызова, начатуюmyFunction
, затем? -
exceptions.TypeError: stop() takes exactly 1 argument (2 given)
.
Чтобы решить вторую проблему, мне пришлось определить специальную функцию:
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
будет работать сейчас)
Нет ли другого способа вызова reactor.stop
за исключением определения дополнительной функции?