看得教程一头雾水, 只能理解那个自带的 http 请求, 看了很久也没看到有比如数据库查询, 文件处理什么的其他例子, 后来去看看其他教程, 实现倒算是勉强实现了, 但感觉也太复杂了吧? ?
就比如例子中的我假设有个长耗时的任务, 怎么写才会简单点?
import tornado.ioloop
import tornado.web
import time
import _thread
# 模拟耗时任务
def long_work(arg):
time.sleep(5)
yield arg * 1024
def mycoroutine(func):
def wrapper(self):
gen = func(self)
work_gen = next(gen)
def fun():
result = next(work_gen)
try:
gen.send(result)
except StopIteration:
pass
_thread.start_new_thread(fun, ())
return wrapper
class IndexHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
@mycoroutine
def get(self):
arg = 10 # 假设请求的参数
result = yield long_work(arg)
self.finish(f'<h1>Index {result}</h1>')
class SyncHandler(tornado.web.RequestHandler):
def get(self):
self.write('<h1>SyncHandler</h1>')
def make_app():
return tornado.web.Application([
(r'/', IndexHandler),
(r'/sync', SyncHandler)
])
if __name__ == '__main__':
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.