2012-11-21 40 views
1

我試圖用Tornado's sync-style 'gen' tool運行一個簡單的回聲功能,在無阻塞風格:最簡單的例子tornado.gen

import tornado.web 
import tornado.gen 
import logging 

def echo(message): 
    return message 

@tornado.gen.engine 
def runme(): 
    response = yield tornado.gen.Task(echo, 'this is a message') 
    logging.warn(response) 

runme() 

至於我可以告訴這個代碼不顯著不同的演示代碼在文檔中,減去不必要的請求處理程序的東西 - 我沒有處理任何HTTP請求,AFAICT這是異步運行的東西是異步的。然而,這總是失敗:

Traceback (most recent call last): 
    File "./server.py", line 46, in <module> 
runme() 
TypeError: wrapper() takes at least 1 argument (0 given) 

究竟我在哪裏失蹤的論點?我如何讓Tornado異步運行此功能?

回答

2

任務實際上並沒有對正在運行的函數進行回調,並且在函數返回時開始回調,正如我原先所想的那樣。

我需要創建任務的回調正在運行的自己,並調用它,即:

import tornado.web 
import tornado.gen 
import logging 

def echo(message, callback=None): 
    callback(message) 

@tornado.gen.engine 
def runme(): 
    response = yield tornado.gen.Task(echo, 'this is a message') 
    logging.warn(response) 

runme() 
+0

究竟你的代碼做什麼?因爲回調是None,是不是會在調用echo時產生異常(message =「this is a message」,callback = None)? –

+0

[請參閱「任務」的功能描述](http://www.tornadoweb.org/en/stable/gen.html?highlight=task#tornado.gen)。龍捲風將'gen.Callback'函數傳遞給'echo'。除此之外,我仍然試圖找出自己:) – Cuadue

+0

它缺少一個返回,'回調回調(消息)'。這種方式在產生任務時異步回聲。 – danigosa