V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
cloverstd
V2EX  ›  Python

微信给的 5 秒不够响应怎么办?

  •  
  •   cloverstd ·
    cloverstd · 2013-03-21 23:16:57 +08:00 · 4603 次点击
    这是一个创建于 4054 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我用 web.py 作为 web 构架来响应微信公众平台,做一个可以帮助同学查询信息的程序。

    程序主要流程是
    同学发来学号空格生日 -> 解析 xml 取得学号和生日 -> 用 urllib2 向学校网站查询 -> re 解析获得需要的信息 -> 返回给同学

    之前我用 Nginx + uWSGI 在 HOST700 的 128MB VPS 上运行过一段时间,一切正常,但是后来就发现总是得不到响应了,刚开始以为自己配置错误或者内存太小了,后来发现不是的,是因为响应时间不够。

    今天放在 SAE 上试了下,发现有时第三阶段到第四阶段的时间是 2s,有时是 10+s

    最蛋疼的是学校那个网站上有一段判断访问者状态的 viewstate 的值每天都在变化,我之前都是先从登录页面用 urllib 和 re 动态的获取这段值,响应时间也是够的,现在我直接把这段值写在代码里,响应时间还是不够,请问下有没有什么解决办法?

    5s 会不会太少,还是我代码复杂,导致程序运行效率低?
    13 条回复    1970-01-01 08:00:00 +08:00
    silverty
        1
    silverty  
       2013-03-21 23:26:33 +08:00
    先判断urllib访问学校网站的响应时间有多少,可能是学校网站的运行效率太低了。
    cloverstd
        2
    cloverstd  
    OP
       2013-03-21 23:59:40 +08:00
    @silverty
    我测试了下直接打开网站并且 read(),时间在 1s 以下
    然后测试了下登录并且 read(),时间从 1s 以下到 10s 都有

    学校网站本来就是个渣,如果是学校网站效率太低,请问有没有什么解决方法?
    leiz
        3
    leiz  
       2013-03-22 00:13:41 +08:00
    把从学校网站查到的信息存下来,缓存或者直接存本地服务器
    for4
        4
    for4  
       2013-03-22 00:22:18 +08:00   ❤️ 1
    让同学多查询几次, 第一次触发查询任务并入库. 第二次直接从自己的数据库读取.
    没有太好的办法解决的...
    nsxuan
        5
    nsxuan  
       2013-03-22 02:23:29 +08:00 via iPad
    正方教务?
    lbj96347
        6
    lbj96347  
       2013-03-22 03:09:41 +08:00
    爬虫的东西,的确会受到学校网络的限制。建议如果学号这些东西有规律的话,根据规律,把相同班级的一些同学拿到的基本数据存下来,在自己的服务器上查询就快好多了。最糟糕就是选修课的情况,如果是选修课的话大家都不同。你又必须去爬...
    vigoss
        7
    vigoss  
       2013-03-22 07:56:22 +08:00 via Android
    异步执行任务,每来一次请求先加入队列。然后再多次尝试。高性能必须依赖异步
    cloverstd
        8
    cloverstd  
    OP
       2013-03-22 08:07:53 +08:00 via Android
    @for4
    @leiz
    我正打算这样做,把每个人的微信号和相关帐号绑定起来,每日后台更新缓存到数据库


    @nsxuan 不是的


    @vigoss 但是响应只有一次,而且只有 5s 啊
    cloverstd
        9
    cloverstd  
    OP
       2013-03-22 08:08:56 +08:00 via Android
    @lbj96347 学号有规律,密码是生日,这个不知道啊
    vigoss
        10
    vigoss  
       2013-03-22 08:21:12 +08:00 via Android
    @cloverstd 你不是说是2秒到10秒么?存下队列后超时就留下再尝试。

    还是我理解错了,微信我不清楚。是只能在客户端发出指令的5秒内做出响应么?能不能记录下客户端的id什么的之后再发结果。第一次先发个正在查询中,前后会再发一条
    cloverstd
        11
    cloverstd  
    OP
       2013-03-22 08:27:06 +08:00 via Android
    @vigoss 用户发微信,微信公众平台收到后把消息 POST 我的服务器,这个连接只持续 5s,所以说我服务器端处理数据的时间只有 5s,微信又不能主动推送
    loveminds
        12
    loveminds  
       2013-03-22 09:42:22 +08:00 via iPhone
    这个服务器尽量放在离校园网近的地方
    我不知道Host700是BGP还是单线接入
    但不建议使用延迟过大(大于等于75)ms的机器
    如果你们学校有电信/联通的外网出口的话,尽量选择就近的合适线路机器
    如果仅有赛尔,那就需要另行测试
    thursday
        13
    thursday  
       2013-03-22 10:03:15 +08:00
    您的查询请求已经提交。由于校方服务器问题。大约需要1分钟后才能处理结束。请一分钟后 重新提交查询。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2830 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 15:09 · PVG 23:09 · LAX 08:09 · JFK 11:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.