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
vianvio
V2EX  ›  Python

flask 代码执行效率问题

  •  
  •   vianvio · 2015-03-24 12:14:09 +08:00 · 3210 次点击
    这是一个创建于 3531 天前的主题,其中的信息可能已经有所发展或是发生改变。

    近期刚开始用flask,所以遇到些奇怪问题想请教一下。

    从别人那里拿到了数据分析的代码,直接console里运行.py文件的情况下,运行时间在1~2秒
    而我将这段代码放到flask里,写了一个路由,间接执行这段代码的时候,运行时间是之前的6~10倍。。。

    为了确保执行情况一致,我将用到的数据hardcode在代码中,并且在flask的service调用时,用multiprocess新建了一个单独进程去跑,结果还是相差6~10倍。

    我有将时间log打在最耗时的代码前后,发现直接python xxx.py的运行情况下耗时在15000mircoseconds左右,而通过service,会高出10倍到20倍。

    单独开进程跑的情况下应该已经将flask框架相关的影响去除了吧?感觉理论上应该和console里执行是一样的,可是为什么还是差那么多?
    还请高手指点个方向,谢谢!

    补充:
    耗时的代码大致内容是string匹配string数组
    即类似于
    arrTest = ['a', 'b']
    if ( 'a' in arrTest):
    这样的情况,if内部执行的代码是对panda库的一条记录的一列数据进行附值。
    i.e.
    post # panda object
    arrTest = ['a', 'b']
    if ( 'a' in arrTest):
    post['colA'][0] = 'a'
    并没有其他需要大量运算的代码

    tigereatsheep
        1
    tigereatsheep  
       2015-03-24 16:23:40 +08:00
    这样很难说,贴一些示例代码看一下呗
    vianvio
        2
    vianvio  
    OP
       2015-03-24 16:47:07 +08:00
    @tigereatsheep 看了下api和源码,问题已经解决了,哈哈,但是还有些疑惑,但至少能work了
    解决办法:
    将原先用于dataFrame对象附值的语句
    post['a'][0] = 'test'
    用dataFrame本身的set_value方法改写
    post.set_value(0, 'a', 'test)
    执行时间按microseconds计算,上面一种平均20万,下面一种方法,平均50
    但是造成这么大差距的原因需要继续深挖源码,暂时还不清楚。。。有待高手
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5448 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 06:41 · PVG 14:41 · LAX 22:41 · JFK 01:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.