【问题标题】:traitlets python3 performance - Int() and Unicode()traitlets python3 性能 - Int() 和 Unicode()
【发布时间】:2022-10-01 09:16:05
【问题描述】:

在 python 3.9 下使用traitlets.Int() 和traitlets.Unicode() 对性能有何影响?

    标签: python performance python-traitlets


    【解决方案1】:

    traitlets.Int() 和 traitlets.Unicode() 的性能比 Python 3.9.14 标准库慢了大约 25 倍。

    $ python -V
    Python 3.9.14
    $
    $ uname -a
    Darwin WS-T604GF3GK0.tld 21.6.0 Darwin Kernel Version 21.6.0: Wed Aug 10 14:28:23 PDT 2022; root:xnu-8020.141.5~2/RELEASE_ARM64_T6000 x86_64
    $
    $ python traitlets_test.py
    After traitlets initialization, traitlets Unicode() was 24.0261 times slower than python stdlib
    After traitlets initialization, traitlets Int() was 26.2789 times slower than python stdlib
    $
    

    如果有人想看看我曾经测试过的东西,这就是脚本......

    # filename: traitlets_test.py
    
    from timeit import timeit
    import sys
    
    from traitlets import HasTraits, Int, Unicode
    
    ###############################################
    # Define traitlets tests here
    ###############################################
    
    class MyTraitTester(HasTraits):
        """
        Initialize a HasTraits() class instance and define static
        types for foo_int and foo_unicode.
        """
        foo_int = Int()
        foo_unicode = Unicode()
    
    def with_traits_int():
        harness.foo_int = 5
        return harness.foo_int
    
    def with_traits_unicode():
        harness.foo_unicode = "5555555555555555555555555555555555555555555555555555"
        return harness.foo_unicode
    
    ###############################################
    # Define python stdlib tests here...
    ###############################################
    
    def without_traits_int():
        foo_int = 5
        return foo_int
    
    def without_traits_unicode():
        foo_unicode = "5555555555555555555555555555555555555555555555555555"
        return foo_unicode
    
    if __name__=="__main__":
        # Initialize traitlets here... `traitlets.HasTraits()` looks very slow... I will not test performance with it.
        harness = MyTraitTester()
    
        time_with_traits = timeit("with_traits_unicode()", setup="from __main__ import with_traits_unicode", number=1000000)
        time_without_traits = timeit("without_traits_unicode()", setup="from __main__ import without_traits_unicode", number=1000000)
        print("After traitlets initialization, traitlets Unicode() was {} times slower than python stdlib".format(round(time_with_traits/time_without_traits, 4)))
    
        time_with_traits = timeit("with_traits_int()", setup="from __main__ import with_traits_int", number=1000000)
        time_without_traits = timeit("without_traits_int()", setup="from __main__ import without_traits_int", number=1000000)
        print("After traitlets initialization, traitlets Int() was {} times slower than python stdlib".format(round(time_with_traits/time_without_traits, 4)))
    

    【讨论】:

      猜你喜欢
      • 2011-09-11
      • 1970-01-01
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 2012-03-17
      • 1970-01-01
      • 2016-03-01
      • 1970-01-01
      相关资源
      最近更新 更多