tornado一步一步来(一)

# -.- coding:utf-8 -.-
# __author__ = 'zhengtong'
# tornado io_loop是单线程任务,
# 当任何堵塞代码加入到该线程中都会导致整体堵塞.
# 所以必须要谨慎对待ioloop.
from tornado import gen, ioloop


def fibonacci(n):
    if n <= 1:
         return 1
    else:
         return fibonacci(n-1) + fibonacci(n-2)


@gen.coroutine
def proxy():
    """
    由于add_future要求第一个参数(func)必须是一个future
    所以不能直接写fibonacci, 要用gen的Return包裹成future对象.
    """
    raise gen.Return(fibonacci(34))


def main():

    def callback(future):
        """
        io_loop执行完proxy()后会将执行结果的future
        返回给本函数并且运行本函数
        """
        print future.result()
        print 'exiting.'

    io_loop.add_future(proxy(), callback=callback)


if __name__ == '__main__':
    io_loop = ioloop.IOLoop.current()
    io_loop.run_sync(main)

 

你可能感兴趣的:(tornado一步一步来(一))