Написание собственных асинхронных библиотек с помощью Tornado

/
2014-08-21 00:08
Просмотры: 2592

Торнадо фреймворк - логотип

Для написания собственной асинхронной библиотеки с помощью фреймворка Tornado будем использовать декоратор tornado.gen. Результат выполнения возвращается с помощью callback. Необходимо так же понимать, что при написании обертки над синхронными библиотеками, они не станут асинхронными. И вызов yield gen.Task(my_func, my_arg) - не выполниться асинхронно, если my_func - будет синхронной.

Пример асинхронной библиотеки, файл my_lib.py:

import tornado.gen

class MyLib():

    @tornado.gen.engine
    def print_some_text(self, some_text, callback=None):
        result = "Print: '{0}'".format(some_text)
        error = None
        callback(result, error)

    @tornado.gen.engine
    def check_error(self, callback=None):
        error = "This is the error"
        callback(None, error)

Пример обработчика, с использованием собственной асинхронной библиотеки:

from my_lib import MyLib
mylib = MyLib()

class Handler(tornado.web.RequestHandler):

    @tornado.web.asynchronous
    @tornado.gen.engine
    def get(self):
        print("get")
        future = tornado.gen.Task(mylib.print_some_text, some_text="What's up?")
        response = yield future
        (result, error) = response.args
        if error:
            raise tornado.web.HTTPError(500, error)
        else:
            self.set_header("Content-type", "text/html")

            self.write("result : {0}".format(result))
            self.write("error : {0}".format(error))
            self.finish()

Добавить комментарий

comments powered by Disqus