flask 代码执行效率问题

2015-03-24 12:14:09 +08:00
 vianvio

近期刚开始用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'
并没有其他需要大量运算的代码

3089 次点击
所在节点    Python
2 条回复
tigereatsheep
2015-03-24 16:23:40 +08:00
这样很难说,贴一些示例代码看一下呗
vianvio
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
但是造成这么大差距的原因需要继续深挖源码,暂时还不清楚。。。有待高手

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/178986

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX