Twisted Deferred geri aramada istisna nasıl yakalanır?

    from twisted.internet import reactor, defer

def getDummyData(x):
    """
    This function is a dummy which simulates a delayed result and
    returns a Deferred which will fire with that result. Don't try too
    hard to understand this.
    """
    d = defer.Deferred()
    # simulate a delayed result by asking the reactor to fire the
    # Deferred in 2 seconds time with the result x * 3
    reactor.callLater(2, d.callback, x * 3)
    return d

def printData(d):
    """
    Data handling function to be added as a callback: handles the
    data by printing the result
    """
    raise ValueError('IIIGGAA')
    print d

def nextCall(d):
    import pdb; pdb.set_trace()
d = getDummyData(3)

d.addErrback(nextCall).addCallback(printData).addErrback(nextCall).addCallback(nextCall)


# manually set up the end of the process by asking the reactor to
# stop itself in 4 seconds time
reactor.callLater(1, reactor.stop)
# start up the Twisted reactor (event loop handler) manually
reactor.run()

nextCall işlevi - asla arama yapmaz. ValueError'umu bulabildim mi?

Teşekkürler.

2

1 cevap

Hiçbir zaman çağrılmayan kodun, reaktörün kendisini 4 saniye içinde durdurmasını istediğini söylemesi, reaktörün kendisini 1 saniyesinde durdurmasını ister. 2 saniye callLater asla çağrılmaz, bu nedenle d asla tetiklenmez, bu nedenle nextCall asla çağrılmaz.

Belki de reaktörün kullanımı olmadan bu örneği oluşturmayı denemelisiniz, sadece ilgili kodlanmış uygun zamanda geri arama 'yı arayarak? Reaktöre basit bir Ertelenmiş atmak ve bunlarla senkronize etmek size tam olarak ne zaman olduğu hakkında daha kesin bir fikir vermenize yardımcı olabilir.

4
katma
Haklısın, teşekkürler! Anlamıyorum. Bunu nasıl özledim?
katma yazar Oduvan, kaynak