Manacher|马拉车算法|回文子串
1 |
|
1 |
|
1 | import colorsys |
导入全局的profiler或创建一个局部的profiler
给函数添加装饰器@profile(profiler)
给代码段增加with profile_scope(profiler, name)
在统计结束后程序退出前调用print_profile(profiler)会在控制台输出各个线程中各个方法或代码段的耗时和调用次数,通过缩进体现调用关系。
如果想输出到日志文件,可以给print_profile
传递print_func
参数。
参考print_profile
遍历节点的方式可以实现自定义输出或功能。
1 |
|
pycallgraph2
是一个Python模块,用于为Python应用程序创建可视化的调用关系图。
1 | pip install pycallgraph2 |
Linux
1 | sudo apt install graphviz |
Windows
1 | https://graphviz.gitlab.io/_pages/Download/windows/graphviz-2.38.msi |
通过
1 | dot -V |
可以确认安装成功
1 | usage: pycallgraph [options] OUTPUT_TYPE [output_options] -- SCRIPT.py [ARG ...] |
例如
1 | pycallgraph graphviz --output-file=my_callgraph.png -- ./test.py |
1 |
|
对kafka-python进行封装,增加了去重,因为默认情况下Kafka只保证不丢失数据,不保证极端情况不重复,这里增加去重处理后可保证不重不漏,还实现了从指定时间还是订阅的功能。
1 |
|
mount命令的执行需要sudo权限,其实有一些命令允许普通用户进行挂载操作
fusermount 用户空间挂载NFS共享
smbnetfs 用户空间挂载samba共享
sshfs 用户空间基于SSH挂载共享
卸载可以统一使用 fusermount -u
强制(延迟)卸载使用 fusermount -z
tar_backup.sh
将指定目录压缩备份到指定目录下并自动轮转保留最近5次备份
1 | #!/bin/bash |
解压到当前路径
1 | tar -xvf backup-20240617-235910-016764400.tar.xz |
解压到指定路径
1 | tar -xvf backup-20240617-235910-016764400.tar.xz -C /path/to/destination |
对于使用绝对路径的备份,解压到原路径
1 | tar -xvf backup-20240617-235910-016764400.tar.xz -C / |
有时候我们希望函数调用的缓存能够夸进程使用或者在程序重启后仍然有效。
一个显然的想法是缓存到redis,于是就有了下面的代码
1 |
|
这里的主要问题是使用什么作为redis的key来确保真正相同的调用使用到相同的缓存。
如果我们在key中拼入进程ID,那么则是非常保守的,不同进程将无法使用到相同的缓存。
我这里默认使用 脚本文件名+函数名+参数 作为key,但是或许有两个相同脚本名的脚本中定义了同名的但功能不同的函数,这时候不应该使用相同的缓存。
总之我们只能折中处理,因为我的目的就是跨进程使用缓存,所以没有特别保守,同时提供了scope参数,可以自定义一个拼入key的标识,在必要时由用户决定能否使用相同的缓存。
有时我们希望使用一些对数据大小或类型有限制的数据结构,例如树状数组(要求整型并且因为内存的关系最大数据范围通常为1e6量级)。
但是如果我们的数据个数在1e6之内,并且我们只关心数据的序,我们就可以在非负整数和我们的数据集之间建立映射来使用树状数组(或其他有限制的数据结构)。
那么这里我们就期望一个帮助建立映射的函数
1 | #include <iostream> |
上面的得到rank实际上是 arr -> 同序非负整数集 的映射。