学院网站建设项目的成本计划书,做网站后台怎么弄,wordpress页面添加图片不显示图片,做网站买什么服务器 便宜背景
在线上的一次模型对照实验中#xff0c;发现对同一个用户进行 hash 分流时#xff0c;会生成不同的 random 值#xff0c;导致实验数据污染
原因
参考#xff1a;https://www.zhihu.com/question/57526436 python 的字符串 hash 算法并不是直接遍历字符串每个字符去…背景
在线上的一次模型对照实验中发现对同一个用户进行 hash 分流时会生成不同的 random 值导致实验数据污染
原因
参考https://www.zhihu.com/question/57526436 python 的字符串 hash 算法并不是直接遍历字符串每个字符去计算 hash而是会有一个 secret prefix 和一个 secret suffix可以认为相当于是给字符串加盐后做 hash可以规避一些规律输入的情况 参考https://blog.csdn.net/qq_27093891/article/details/122585391 在 3.x 中修改了默认行为如果你不配置环境变量则默认是随机一个前后缀值这样每次启动都会不同这个环境变量是PYTHONHASHSEED无论在2.x还是3.x中配置为一个正整数将作为随机种子配置为0则secret前后缀默认清零和2.x默认行为就一样了配置为空串或“random”则表示让进程随机生成 简单说就是不同 session 的不同 hash 随机种子导致了对于同一个值的 hash 不一致
解决
参考https://cloud.tencent.com/developer/article/1873941 参考https://blog.csdn.net/weixin_36149892/article/details/120297930
import hashlib# 返回 string 的 1~2 的 hash 值
def get_md5_num(username):md5_machine hashlib.md5()md5_machine.update(username.encode(utf-8))md5_hash_string md5_machine.hexdigest()md5_hash_num int(md5_hash_string, 16) % 2 1return md5_hash_num
需要注意的一个问题 Update the md5 object with the string arg. Repeated calls are equivalent to a single call with the concatenation of all the arguments: m.update(a); m.update(b) is equivalent to m.update(ab). 如果重复使用对象也就是将 md5_machine hashlib.md5() 放到函数外的话第二次产生的哈希码实际上是和两次字符串拼接所产生的结果因此需要将 md5_machine hashlib.md5() 放到函数内每次都重新创建即可保证结果一致