にそのバイト文字表現に整数に変換するとき、Pythonの2.xでPythonの3.xの性能iは整数に変換する必要がある。具体的にはPython
までのpython 2.6のバイトに9999
、b'9999'
を言いますpython 2.6
('%s'%n).encode()
パフォーマンスながら、私は
b'%s'%n
を行います私のベンチマークが正しく設定されていると仮定すると、Pythonで10
>>> from timeit import Timer
>>> Timer('b"%s"%n','n=9999').timeit()
0.24728001750963813
パフォーマンス3.2
>>> from timeit import Timer
>>> Timer('("%s"%n).encode()','n=9999').timeit()
0.534475012767416
は、それはPythonの3.xで多額の違約金あり
2.6/2.7でギャップを閉じるためにパフォーマンスを改善する方法はありますか?
多分cython経由でですか?
これは私が最適化しようとしているジェネレータ関数です。それはargs
は、文字列のリストであることを何度も呼ばれ、バイトまたは番号:
def pack_gen(self, args, encoding='utf-8'):
crlf = b'\r\n'
yield ('*%s\r\n'%len(args)).encode(encoding)
for value in args:
if not isinstance(value, bytes):
value = ('%s'%value).encode(encoding)
yield ('$%s\r\n'%len(value)).encode(encoding)
yield value
yield crlf
機能が、私はのreprを使用して少しでも良い結果を持っている
b''.join(pack_gen(args))
なぜバイトである必要がありますか? –
最初に文字列に変換してからバイトに変換する必要があるので、大きなペナルティです。私はその周りに道を見ない。問題はそれが本当に関連しているかどうかです。これは実際にアプリケーションで大きなパフォーマンス上のペナルティですか? –
はい、そうです。常に呼び出される関数の長いループの内部にあります。 –