Python tornado异步阻塞问题求助,pythontornado,import os im
Python tornado异步阻塞问题求助,pythontornado,import os im
import os import time import tornado.webfrom tornado import gen from . import BaseHandlerclass RegisterHandler(BaseHandler): def get(self): self.render_html('register.html') @tornado.web.asynchronous @gen.coroutine def post(self): username = self.get_argument('username', None) email = self.get_argument('email', None) password = self.get_argument('password') data = {'username': username, 'email': email, 'password': password, 'timestamp': time.time()} if username and email: time.sleep(10) yield self.db.user.insert(data) self.redirect('/')class LoginHandler(BaseHandler): def get(self): self.render_html('login.html')
我在注册的时候用time.sleep(10)阻塞了10秒, 按理说我通过异步的方式在这段阻塞的时间内是可以通过,浏览器访问我的login页面,但却同样被阻塞了。怎么解决这个问题还是我的代码有问题?
因为tornado是单线程的,你sleep了10秒,当然会把你的页面阻塞掉。
gen.sleep才是你要的
题主对异步的理解有偏差。
目测你是像模拟注册写数据的时候10s耗时间的操作。这个过程是异步的,不会影响tornaod处理别的请求。
问题在于 time.sleep这个模拟不正确,这句代码的含义就是整个 tornado 服务(单进程单线程)sleep,10s.
10s之后再接着处理请求。
另外,tornado yeild 这种是协程,是指多个并发请求的时候,其中一个耗时的请求不会阻塞其他的请求。不是只单个请求马上返回,使用callback的方式可以单个请求马上返回。
编橙之家文章,
相关内容
- Debian系统有什么方法能让ftp走校内vpn通道,debian校内
- linux系统能显示当前活动窗口所在屏幕吗,linux窗口,我
- Python类实例内部得到并使用实例所在类名字或者类本身
- Windows下监控文件变动情况的python方法有哪几种?,变动
- 字典不停循环添加新项,更新python字典问题,python字典
- python能将文件转换为'1010'文本吗?,,最近迷上了玩py
- Python开发Online Judge服务器后端有优势吗?,pythonjudge,服务
- python里面生产者和消费者关于线程疑问,python生产者
- 在Python中实现js的escape?,pythonescape,js:>>>escape
- Python Flask源码异常处理的问题,pythonflask,Flask versio
评论关闭