gpt4 book ai didi

python - python Tornado RequestHandler 协程安全吗?

转载 作者:行者123 更新时间:2023-12-01 04:57:04 26 4
gpt4 key购买 nike

众所周知,在线程中,我们有一个概念叫thread-safe .

当我使用tornado协程时,我不知道RequestHandler协程的self是否安全。

这是我的代码:

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”,否则您不会被中断。因此,您无需担心访问“self”或 yield 之间的任何其他值。

参数传递在协程中正常工作,但要返回一个值(在 Python 2 中),请引发 gen.Return:

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”也可以工作。

关于python - python Tornado RequestHandler 协程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27153135/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com