优化了一波 Index.py 的 Radix Tree 实现

abersheeran:https://github.com/abersheeran/index.py/blob/master/indexpy/routing/tree.py

修了一个特定路由结构下会产生的 BUG (我写文档的时候靠脑子推算出来的,夸一波自己,我真牛逼),优化了一波代码结构,比之前那个我花了一夜糊出来的狗屎代码好多了。每次我有一个更屌的想法就感觉之前的东西都是狗屎哈哈哈。

search 这一部分我从递归优化到了循环,但是 append 这一部分好像没什么从递归改循环的必要,毕竟 Index.py 的路由构建是在启动时,慢不到 0.01 秒应该没啥感觉。

现在已经把路由构造、中间件展开和异步包装都全放到代码加载的时候去做了,运行的时候基本只有 search route 然后 parse params 最后 call handler 这样一个操作。

这个地方还有没有优化的空间?这个版本的代码比之前那坨狗屎代码每 10000 次请求要慢 0.5 秒左右的样子,但是因为项目的路由多寡而导致的波动比之前要小,我也不知道啥情况,难道是因为之前没有匹配完全路由?还是因为这里用了栈的原因。希望 V2EX 有大佬愿意看看。

性能测试在这 https://github.com/abersheeran/asgi-benchmark

fy:原来是 web 框架
我在写的时候也想过 router 怎么弄,比如弄成一个大正则,根据匹配的 group 查 index 就知道是哪一个了。c 写的化简之后的 nfa 应该不慢吧?

但是到了最后就偷懒了,我发现路由地址分两种,一种是确定的地址,占绝大多数。另一种是正则,占少量。那就为绝大多数做优化,由于确定的地址就是个 str,那么做个 dict 一查就行了,代价是 O(1),剩下正则就遍历。
可能还有必要优化,不过我觉得思考 web 框架解决的问题比 router 更重要,暂时就不管了。

看了 lz 的框架,真是同一个世界同一套技术栈,asgi uvicorn redoc aiofiles click pytest

不同的地方是我对 pydantic 心存疑虑,我觉得报错信息太奇怪了,但是好像目前也没其他选择。

此外我完全舍弃了模板的部分,因为我觉得 0202 年了,大家都前后端分离已经没人用模板了。框架没必要支持这个。

还有就是感觉自己文档写的真心差,比不上 lz 写的(虽然内容也不多)完全没指望有开发者来用一样。

这是我的 web 框架
https://github.com/fy0/slim

router 实现
https://github.com/fy0/slim/blob/master/slim/base/route.py

请问有什么比较火,并且好用的 go 的 job 调度框架吗?

secretName:由于公司技术栈的原因,所以现在打算在 go 里面找一个 job 调度框架。 找了一圈,只发现 gocron 貌似还可以的样子,但是调度只支持 shell 与 http,连异步任务都没有,我这里常用的任务有时候调度时间通常都在好几小时,这样显然是满足不了要求的。 难道只能自己造一个轮子了吗?sirius1024:robfig/cron

像 Python 的 GC 这种代码是怎么一种开发逻辑?

oahebky:就是比如引用计数, 其它的如标记清除+分代回收、缓存就先不说了, 把循环引用当做 bug,下一代修复发布、缓存当做下一代发布。 就仅引用计数这个 GC 基本原理而言。 有了这么个原理,然后也设计出来双向环状链表的数据结构来实现。 就是到了具体代码,这么实现一下;看这种实现一下一次就是核心的上千行;不能一次加一点点代码; 就这样类似实现后,怎么…

py.test汇总多个测试运行的结果 - python

我正在运行pytest.main()的几个实例,一旦它们全部完成,我想快速查看所有运行过程中的失败情况,而无需查看所有单独的报告。我怎样才能做到这一点?我是否必须解析文本报告,还是可以让py.test返回带有失败数据的对象? (据我所知,它只是返回一个整数) 参考方案 我为此使用Allure报告(https://docs.qameta.io/allure/#…

Coverage.py:如何为从外壳程序脚本调用的多个python脚本附加结果 - python

我正在使用带有参数调用多个python代码的shell脚本。现在,我的要求是收集整个项目的报告。任何想法如何在整个代码上运行coverage.py并生成合并的报告。以下是我正在使用的shell脚本的高级模板。如果有人可以指导如何实现上述要求。#!/bin/bash variable=$1 /usr/bin/python python1.py $variabl…

Numpy等效于list.index - python

在多次调用的低级函数中,我需要执行与python的list.index等效的操作,但要使用numpy数组。该函数在找到第一个值时需要返回,否则返回ValueError。就像是:>>> a = np.array([1, 2, 3]) >>> np_index(a, 1) 0 >>> np_index(a, …