
1 malusama Aug 30, 2021 你把状态保存到外部储存不就好了。 用 redis 之类的储存? |
2 fgwmlhdkkkw Aug 30, 2021 转成 json,然后对 json 做 hash 。 |
3 xx6412223 Aug 30, 2021 不管存哪都要 key 啊 和内外部有啥关系 |
4 eason1874 Aug 30, 2021 1 、能写到内存就能写到硬盘; 2 、高级语言都会有一些方法库可以将正在运行的指定的 source code 转换成 string ; 保存状态一般是保存数据,需要连代码都保存的场景很少很少,你的业务实现可能走了弯路 |
5 janxin Aug 30, 2021 我猜你可能想要了解__eq__和__hash__ |
6 imn1 OP @eason1874 #4 不需要代码,只是参数和函数名,只需要一个标识 举个例子,目前遇到的: 机器学习要做大量调参工作,限于机器能力,有些工作并不是一天能够完成的,要分成几个步骤几天完成 需要把中间结果保存,但是同一个函数参数不同,结果就不同,有可能回过头来重新调取之前某次的中间结果再计算 例如 funA,funB,funC 要三天完成,但结果不理想,需要 funA,funB1,funC1 再做一次,这时 funA 之前已经计算过了,肯定不想再花一天重新计算,如果 funA 依据参数不同也有 funA1,funA2……自然期望每次都自动保存下来,以后根据函数名+参数就能识别出 cache 来了,funB/funC 也有类似情况 |
8 eason1874 Aug 30, 2021 @imn1 #6 我理解错了,那你的需求还是保存数据,只是不知道怎么实现。 那可以按 #1 说的做,用 Redis,函数名和参数当 key (太长就取 hash ),开启持久化存储到硬盘,程序结束还是能读回来。启动程序的时候,传参指定初始化数据的 key 去读取。 |
9 imn1 OP |
10 imn1 OP |
11 hushao Aug 30, 2021 via iPhone 你自己都提到了 pickle |
12 O5oz6z3 Aug 30, 2021 没做过,想到几个麻烦的思路,权当参考。 1. 用环境变量 pythonhashseed 固定 hash()的结果,但是未必可靠。 2. 感觉本质上和 #5 楼说的一样,根据你的具体情况来决定将函数的哪些属性作为特征来哈希。比如说,包含函数的源码行数与文件位置、函数名、参数签名等等。 将函数的几个属性转为元组也能直接用作哈希,或者进一步将元组用 str()字符串化后再用 md5 之类的哈希函数。 如果用字典,就 json.dumps(sort_keys=True)之类的(没用过但听说还有 frozenset(dict.items())、deepdiff.DeepHash(dict)[dict]、frozendict 之类的) |
13 XD2333 Aug 30, 2021 重写__eq__和__hash__? |
14 ysc3839 Aug 31, 2021 你能保证 pickle 后得到的数据是一一对应的话,对 pickle 后得到的数据进行 hash 就好了。 |