繁体   English   中英

python龙卷风RequestHandler协程安全吗?

[英]Does python tornado RequestHandler coroutine safe?

众所周知,在线程处理中,我们有一个概念称为thread-safe

当我使用龙卷风协程时,我不知道RequestHandler协程的自身是否安全。

这是我的代码:

class IndexHandler(tornado.web.RequestHandler):
    @tornado.gen.coroutine
    def get(self):
        self.write("Kingsoft API.")
        self.abc = 2
        yield self.gener()
        self.write(self.k)
        print self.k
        self.write("Kingsoft API.")
        return

    @tornado.gen.coroutine
    def gener(self):
        http_client = AsyncHTTPClient()
        self.k = str(int(time.time()*100000))
        response = yield http_client.fetch('http://127.0.0.1:8000/')

另一个问题是,我的代码是否可以正常工作?

第三个问题是,我只能使用self来传递参数和返回值,但这很丑陋。 如果我想在某个函数中使用AsyncHTTPClient而不是通过回调的方式使用,我还有其他好方法吗?

您的代码位于“ yield”语句之间的“关键部分”中-除非执行“ yield”,否则您不会被打断。 因此,您无需担心在收益率之间访问“自身”或任何其他值。

参数传递通常与协程一起工作,但是要返回一个值(在Python 2中为),请提高gen。

class IndexHandler(tornado.web.RequestHandler):
    @tornado.gen.coroutine
    def get(self):
        self.write("Kingsoft API.")
        k = yield self.fn(2)
        self.write(k)

    @tornado.gen.coroutine
    def fn(self, arg):
        k = 2 * arg
        raise tornado.gen.Return(k)

在Python 3.3+中,也可以使用简单的“ return k”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM