Boost Python的C++对象, Pickle支持及其原理
默认用boost python包裹的C++对象是不支持pickle的,如果要用pickle.dumps(obj)的话那会提示错误Pickling of "xxx" instances is not enabled.这边吐槽一下在最新的代码里,给的reference链接其实还是不可用的。真正正确的是https://www.boost.org/doc/libs/1_74_0/libs/python/d
默认用boost python包裹的C++对象是不支持pickle的,如果要用pickle.dumps(obj)的话那会提示错误Pickling of "xxx" instances is not enabled.这边吐槽一下在最新的代码里,给的reference链接其实还是不可用的。真正正确的是https://www.boost.org/doc/libs/1_74_0/libs/python/d
背景之前发现Jupyter Notebook下面,如果数据占用多的话,开多进程池会特别的慢。一开始以为是Python的锅,但是把multiprocessing.pool改成直接用os.fork()调用以后,问题依旧。照理来说unix下面使用fork开进程,会启用copy-on-write机制,内存增长并不是特别明显,但是实际在htop下面看内存仍然会在fork之后增长,并且和进程数量是线性相关的。
It seems that Python writes to /tmp on linux base os when allocating python.multiprocessing.sharedctypes.RawArray. If the disk space on that path is not sufficient, "no disk space" error occ
处理multiprocessing解决棘手的并行问题时,遵循以下策略:把工作拆分成独立单元;如果每项工作所花的时间是可变的,那就考虑随机化工作的序列;对工作队列进行排序,首先处理最慢的任务可能是一个最有用的策略(平均而言);对于细小琐碎的任务,考虑将他们合并分块(chunk),这样能有效减小fork/join通信开销;让任务数量与物理CPU数量保持一致;部分摘自 <High Performa
性能分析用cProfilepython -m cProfile -o output.perf your_script.py --your args然后可以安装pyprof2calltreepyprof2calltree -i output.perf -k记得系统里要装qcallgrind(windows)或者kcallgrind,不然会打不开生成好的log