Tornado, was ist der Unterschied zwischen @ web.asynchronous @ gen.coroutine VS @ gen.corutine

In demdokumentieren, @ web.asynchronous ist nicht erforderlich, wenn die Methode auch mit @ gen.coroutine dekoriert ist. so was

@web.asynchronous
@gen.coroutine
def get(self):
    ...

In document wird jedoch auch erklärt, dass Sie self.finish () aufrufen sollten, wenn Sie @ web.asynchronous verwenden. In dem obigen Fall (wenn zwei Dekoratoren zusammen verwendet werden) wird die Verbindung jedoch beendet, ohne "self.finish ()" aufzurufen.

Ich frage mich, was da drin passiert ist.

und im unteren Fall funktioniert es anders mit oben.

@web.asynchronous
def get(self):
    self.test()

@gen.coroutine
def test(self):
    httpClient = AsyncHttpClient()
    val = yield httpClient.fetch("http://www.google.com")
    print test
    #self.finish()

Wenn "self.finish ()" nicht aufgerufen wird, wird die Verbindung nicht geschlossen.

Kann das jemand erklären?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage