android上的Python(kivy) - 某些操作的速度瓶颈?

时间:2016-03-04 04:58:32

标签: android python optimization kivy

我在开发Kivy应用程序方面还有很长的路要走。它的目标是Android,但也可以在桌面上工作(同时使用不同的皮肤),最终希望是iOs。

我大量使用的基本依赖项是: -

  • twisted - 使用它作为IPC,我的应用程序有一个服务器/客户端 数据操作和UI之间的关系

  • 飞快移动 - 用于文本搜索

  • xmltodict - 用于简单的XML操作

我在Android上有一个非常长的应用启动时间,在一部相对较新的手机上,这并不是一件好事。从我的粗略时间(基于time.time()并从我的应用程序 init 时间减去): -

  • 我的应用程序在

  • 中大约1秒钟从kivy启动获得控制权
  • 我的自定义类等的初始化是在2.4秒标记

  • 完成的
  • 在14.4秒后,我终于完成了大部分数据加载

  • 在17秒标记处,我开始使用twisted

  • 将数据发送到客户端UI
  • 在22秒标记处,UI接收数据

我想在那里解决多个问题。例如,大约5秒的数据发送间隙可以很容易地分成几部分并在UI中逐步更新,所以我稍后会保留它,但我需要询问数据加载的长12秒间隙。此数据加载涉及创建大约1000个自定义类的实例,具有以下步骤(累计时间超过1000个实例): -

  • 从1000个文本XML文件中读取数据(0.734秒)

  • 在读取数据中解析XML(9.198秒)

  • 根据解析的XML(0.585秒)填充对象的变量

  • 目录树遍历(使用此命令查找某个基本文件夹,0.0824秒)

  • xml文件的mtime测量(0.12秒)

测量的时间让我感到惊讶,因为在我的笔记本电脑上运行相同代码的等效时序是0.041,0.9,0.062,0.009和0.016)。一切都慢了10倍。

如果有的话,我可以做些什么呢?用于测试的手机有3GB内存和一个Snapdragon 801处理器,因此我非常担心在较慢/较旧型号上使用此应用程序。我最初的想法是,减速是由于SD卡固有地慢于我的笔记本电脑的硬盘驱动器,但xml解析(非IO相关)耗时这么长的事实似乎表明处理问题。

建议/批评欢迎。

1 个答案:

答案 0 :(得分:1)

直接的可能性是你只看到android处理器比桌面处理器慢。我不确定现在的基准比较是什么,但我在过去看到过这个问题。也就是说,我已经猜到了差异不应该那么大。

我不知道它是否会有所作为,但尝试一般的事情可能是编译armeabi-v7a(而不是默认的armeabi)。这可以实现硬件浮点计算等。我不知道它是否会对通用应用程序产生影响,但它肯定可以。您可以使用带有--arch=armeabi-v7a的python-for-android主分支或buildozer主分支中的android_new目标来定位它(buildozer操作的其余部分是相同的,它会自动使用v7a)。

另一个问题是,您是否可以访问更高效的xml解析器?如果你能在例如cython而不是python(我现在不知道你在使用什么),这可能会有所作为。我看到在评论中已经提出了使用更有效的数据结构的另一种选择。

很抱歉,这些建议都不具体。如果您在kivy支持渠道上询问,您可能会找到找到并解决类似问题的人。