Python中两个byte数组比较性能最大化及快速等值校验方案咨询
Python字节片段快速比较方案
原有代码问题
你给出的实现逻辑本身是可行的,但存在明显的逻辑bug:你截取了list_1的前8个元素转成bytearray,而常量array_2只有2字节,长度不一致的字节序列比较会直接返回False,永远无法匹配成功。
二进制减法类校验逻辑的可行性
你提到的类似二进制减法的校验逻辑底层原理是逐字节做差求和,和为0则判定相等,这个思路是成立的,但不建议你自己在Python层面实现:Python内置的字节序列==比较已经是C语言实现的底层优化版本,自带短路逻辑(遇到第一个不相等的字节就直接返回结果,不需要比对后续内容),还做了内存对齐等优化,性能远高于你自己手写的Python层面校验逻辑。
性能最优的实现方式
优先调整socket读取逻辑,不要把读取到的字节转成Python列表,直接保留原生bytes对象,原生字节序列的比较速度是Python列表的数十倍。优化后代码如下:
# socket读取时直接生成bytes对象,不要转成int列表 buf = sock.recv(1024) # 要比对的常量字节串 target = b'\x30\x31' # 直接切片对应长度比对,底层做内存级比较,性能最优 if buf[:len(target)] == target: print("Arrays are equal!")
如果受现有业务逻辑限制,只能拿到存字节的Python列表,可以调整为截取对应长度的片段再转bytes比对,注意切片长度要和目标常量长度一致:
# list_1为存储字节的Python列表 target = b'\x30\x31' target_len = len(target) if bytes(list_1[:target_len]) == target: print("Arrays are equal!")
内容的提问来源于stack exchange,提问作者Andrea Costanzo
相关产品推荐
相关产品推荐

