2015-05-12 134 views
0

我是新来的蟒蛇和龙卷风。我正在尝试一些协程的东西。龙卷风协程需要帮助

def doStuff(callback): 
 
    def task(): 
 
     callback("One Second Later") 
 
    Timer(1,task).start() 
 

 
@gen.coroutine 
 
def routine1():  
 
    ans = yield gen.Task(doStuff) 
 
    raise gen.Return(ans) 
 

 
if __name__ == "__main__": 
 
    print routine1()

我试图让doStuff()函数,我希望是 “一秒钟后” 的结果。但它不起作用。任何帮助,将不胜感激。谢谢

+0

什么是“定时器”?我可以看到它的源代码,或者你能告诉我Timer是从哪里导入的? –

+0

Timer在给定时间(秒)后异步调用传递的函数。它存在于Python的“线程化”包中。 –

+0

除非你真的知道你在做什么,否则不要混用线程和龙卷风。请'产生gen.sleep(1)'代替:http://tornado.readthedocs.org/en/latest/gen.html#tornado.gen.sleep –

回答

0

可能发生的情况是,您还没有启动IOLoop,也没有等待您的协同程序在脚本退出前完成。您可能会注意到您的脚本在几毫秒内运行,而不是暂停一秒钟,因为它应该。这样做:

if __name__ == "__main__": 
    from tornado.ioloop import IOLoop 
    print IOLoop.instance().run_sync(routine1) 
+0

谢谢Jesse的帮助。但脚本运行一秒钟左右。它可能是由于计时器? –

+0

啊,由于定时器线程不是守护进程,我猜这个进程在退出前等待定时器线程。 –

+0

非常感谢您的帮助。你能否推荐一些书籍,以便我可以了解更多有关龙卷风的内容? –