相关疑难解决方法(0)

字符串性能 - Windows 10与Ubuntu下的Python 2.7 vs Python 3.4

用例
一个简单的函数,用于检查特定字符串是否位于3的倍数位置的另一个字符串中(参见此处的实际示例,在DNA序列中查找终止密码子).

函数
sliding_window:取一个长度为3的字符串将其与搜索字符串进行比较,如果它们相同则向前移动3个字符.
incremental_start:尝试查找搜索字符串,如果找到的位置不是3的倍数,它会尝试在找到的位置后找到下一个位置.

请注意:示例数据只是为了确保每个函数都必须通过完整的字符串,性能与实际数据或随机数据类似.

结果

  • Python 2.7:在Windows 10上sliding_window使用incremental_startPython2.7中的函数可以将初始函数提高约39倍.Ubuntu的性能改进略有下降,~34x,~37x,~18x(VM,AWS ,原生的),但仍然在相同的范围内.
  • Python 3.4:sliding_window变得比Python2.7慢(Windows上为1.8x,所有Ubuntus上为1.4x,1.5x),但所有Ubuntus的incremental_start性能下降了4,5,1.7(VM,AWS,native)虽然在Windows上几乎没有改变.
  • Windows vs Ubuntu
    Python2.7:虚拟化的Ubuntus需要更少的时间用于这两个功能(~20-30%),原生Ubuntu的速度慢了约25%incremental_start,而速度提高了sliding_window40%.
    Python3:该sliding_window函数需要更少的时间来完成(~50%),而incremental_start变得慢了〜2-3倍.

问题

  • 是什么导致Linux 2与Windows上的Python 2与Python 3的性能差异?
  • 如何预测这种行为并调整代码以获得最佳性能?

import timeit

text = 'ATG' * 10**6
word = 'TAG'

def sliding_window(text, word):
    for pos in range(0, len(text), 3):
        if text[pos:pos + 3] == word:
            return False
    return True …
Run Code Online (Sandbox Code Playgroud)

python performance python-2.7 python-3.4

7
推荐指数
1
解决办法
1196
查看次数

标签 统计

performance ×1

python ×1

python-2.7 ×1

python-3.4 ×1