簡體   English   中英

從Tornado異步調用函數

[英]Calling function from Tornado async

只是在這方面掙扎。 如果我有一個異步請求處理程序,在它執行期間調用其他執行某些操作的函數(例如異步數據庫查詢),然后他們自己調用“完成”,我是否必須將它們標記為異步? 因為如果應用程序的結構類似於示例,我會收到有關“完成”的多次調用的錯誤。 我想我會想念一些東西。

class MainHandler(tornado.web.RequestHandler):

    @tornado.web.asynchronous
    @gen.engine
    def post(self):
        #do some stuff even with mongo motor
        self.handleRequest(bla)

    @gen.engine
    def handleRequest(self,bla):
        #do things,use motor call other functions
        self.finish(result)

是否所有功能都必須標記為異步? 謝謝

調用完成結束HTTP請求,請參閱docs 其他功能不應稱為'完成'

我想你想做這樣的事情。 請注意,有一個額外的參數'回調',它被添加到異步函數中:

@tornado.web.asynchronous
@gen.engine
def post(self):
    query =''
    response = yield tornado.gen.Task(
        self.handleRequest,
        query=query
    )
    result = response[0][0]
    errors = response[1]['error']
    # Do stuff with result

def handleRequest(self, callback, query):
     self.motor['my_collection'].find(query, callback=callback)

有關詳細信息,請參閱tornado.gen文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM