如何在Gevent里杀死一个空的WhileLoop / How to stop a gevent micro thread when it in a while loop

说起这个需求,其实是来自于实现一个Gevent内的代码执行器的逻辑。

这个逻辑要求定时运行某个用户的callback,但是必须不能一直执行这个callback,所以要有Timeout,在Timeout到达的时候,自动kill掉用户的Greenlet.

Gevent自带一个Timeout的实现,同时Greenlet也都表现为DaemonThread运行。

但是经过尝试发现,Gevent的Timeout在这种场景下无法工作。

Continue reading 如何在Gevent里杀死一个空的WhileLoop / How to stop a gevent micro thread when it in a while loop

两个极限编程大赛题解

引子

上周基友忽然问我,周六能不能帮他写写代码,说是参加什么比赛,可以多个人一起做题,赛程好像是24小时。

当时我感觉应该是比较麻烦的事情,准备不做的,不过后面一想,万一很有趣呢,哈哈。

到了周六,都差点忘了有这回事,被一个QQ消息提醒了,就开始做题了。后面才知道,这个活动叫“极限编程大赛”,会临场发布一些网上基本上搜不到的问题,给你解决,分数根据跑过的测试用例来计算。

我帮他做了两个题,都还算比较理想,也花了不少时间,但感觉颇有收获:)

由于问题都比较长,所以我用附件的形式附上英文原文,在下面的文字里面会简单的描述一下问题。

 

Continue reading 两个极限编程大赛题解

重新理解变量在函数内作用域和栈的关系

 

引子

以前对于函数作用域和栈的关系非常不清晰,只知道栈是系统为一个程序预分配的一块空间,程序的预声明变量都存在系统的栈当中,用malloc*分配的空间则在堆当中。

“作用域”和“栈”是一个抽象的概念,并没有深入的理解他们之间的联系。

一直以来都对代码如何在计算机中运行这一块饶有兴趣,最近刚好有时间来了解一下这里面的原理。

Continue reading 重新理解变量在函数内作用域和栈的关系

【树莓派折腾记】-有了树莓派可以做的几件事

前段时间买了一个树莓派,最初的想法是可以用来挂一些下载,或者挂一些爬虫,做做简单的NAS之类的。

最后到手之后,发现树莓派3 B+还是很快的,4个CPU核心+1G RAM,外接移动硬盘的情况下,IO上也可以接受。

 

添加风扇控制

我从淘宝上弄了一个风扇,直接接到树莓派的5v-0v接口上,这样风扇会一直运转,其实还挺烦的……因为声音比较大……所以希望风扇能在温度低于45度的时候,能够自动关闭就好了。

Continue reading 【树莓派折腾记】-有了树莓派可以做的几件事

我为什么要写[CmdTree]这个命令行库

CmdTree是一个命令行库,参见 这里

轮子满地都是……然而我又再造了一个(自尽

现有的库虽然有各自的设计哲学,却无法满足某些特定的需求:)。

能不能享受click带来的便利的同时,也能获取到argparse的子命令支持呢?

为了不再每次都要重复解决这个问题,复制粘贴代码,我写了CmdTree.

Continue reading 我为什么要写[CmdTree]这个命令行库