python time sleep 阻塞 异步_Python tornado异步阻塞问题求助

import os

import time

import tornado.web

from tornado import gen

from . import BaseHandler

class 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的方式可以单个请求马上返回。

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd18709.html

相关文章 Recommend

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值