本文算是平时自己在网上请教别人的一些心得的总结,说白了,就是如何干净利落的获得答案。
不要问“大的”问题
这些问题被称为“月经贴”,经常有人来问,却始终没有好的答案。因为这些大而空的问题,不仅仅让你感到迷茫,你的问法更是让回答者感到迷茫。类似提问“如何学好编程”,“如何找到一个男朋友。”
这样问问题的方式,就是让人感觉提问者根本没有认真思考过这个问题。如果你自己都没有认真思考过,那么回答者自然也没有必要认真回答了。相反,从解决一个小问题的实际出发,这样的问题获得答案就容易也实用的多。
很早以前,我曾幼稚的认为,“只有聪明人,才会探究事物的因果。而大部分人仅仅停留在事物的表面”。后来我发现自己错了,或者说仅仅对了很小的一部分,实际上,每个人都会沉迷于因果关系,因为这是人们的天性。
之前和某个人聊天,他说自己现在挣得比以前多多了,因为自己祖上原来就是土豪,所以现在有钱是因为自己骨子里就有富人的基因。将来会更有钱,反正跟互联网泡沫无关。
我们总会把成功和失败都归于因果关系,只不过成功都归于内因,而失败都归于外因。
而这种自圆其说的方式,不仅仅是为了让自己相信,也是为了让别人相信。
这篇博客,我早就想写了,结果一直拖到现在(快一年),一方面是这篇博客涉及的知识会比较多,“完美主义拖延症”搞得我一直没有去写。但是现在虽然写完了,很多细节我依旧不是很清楚。
这里主要提以下几点:
之前的博客,写到过这个技巧,就是tornado可以让多个请求,并行发出。
只所以这样,是因为比如你要n个接口的返回结果:
1 | response1 = yield http_client.fetch(url1) |
那么你这样实现之后,虽然你的服务是异步的,但是却假定他们的请求之间存在某种先后关系,也就是说response1获得了,才可以获得response2。
但是实际上n个异步请求是可以并行的,而且tornado也支持这种写法(列表和字典都可以):
1 | response1, response2,... responsen = yield [http_client.fetch(url1) , http_client.fetch(url2), ...... ,http_client.fetch(url2) ] |
1 | #直接使用du,表示当前目录下的所有文件 |
查看启动的python进程: ps -ef | grep python
1 | PID:进程的ID |
这种情结在电影电视剧上可能很常见吧。类似你来到一个新公司,这团如淤泥一般的代码,被你接手之后,马上神奇的绽放出光彩,然后你顿时赢得了别人的尊重,但是实际上真实情况是,新人进入一家公司,对老人报以各种不满和怨言,愤世嫉俗,看不惯这个,看不惯那个,觉得这个技术用的搓,那个设计差,然后慢慢的深入理解这个系统,这个新人满满的就会变成老人,开始明白为啥老人会这样。因为你的那点鸟优化,修改出来,影响简直九牛一毛。他们早都想过了,后来他们也是懒的折腾了。
实际的优化是一个很难的过程,没有从业务和技术深入理解一个系统的人,很难做出一个质变的优化,比如你吐槽python运算慢,gil全局锁,单进程不能利用多核,或是其他的,那只能说你从来都没有吐槽到点子上。很多人做事都是自己知道什么做什么,而不是分析当前局势在做,这也就是为什么有些人看着博学其实一事无成,因为他们只能以他们理解的方式去思考问题。