Title: 思维实验室 推荐
黄金时代
赫兹
- 1887 年证实了电磁波。
- 不到 37 岁卒。
以太 (伪科学定论)
胡克 - 惨
光的两个实验
- 双缝干涉(杨)
- 圆盘衍射(菲涅尔)
Title: 记录下自己经常上网查的命令。
ps -ef|grep nginx
重启
nginx.conf
是否正确。 nginx -t
nginx -s reload
安装 rvm , 一个基于 ruby 的工具库?
curl -L get.rvm.io | bash -s stable
安装好 rvm 之后
source ~/.bashrc
source ~/.bash_profile
测试安装是否正常
rvm -v
查看当前 ruby 版本
ruby -v
列出已知的 ruby 版本
rvm list known
安装 ruby
rvm install x.x.x
升级 gem
sudo gem update --system
查看本地是否生成了 SSH
ls -al ~/.ssh
生成新的 SSH key
ssh-keygen -t rsa -C "i.zuucol@gmail.com"
查看公钥
cat ~/.ssh/id_rsa.pub
sudo spctl --master-disable
pod install --verbose --no-repo-update
pod update --verbose --no-repo-update
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
Title: Bilibili
__import__(name, globals=None, locals=None, fromlist=(), level=0)
config
的配置文件路径默认在根目录下,需要更改目录的话,要查看对应的Api文档。__name__
函数调用的话,可以获取这个函数的名称。interface
)。class Base(object):
def play():
raise NoImplementedError('必须实现该方法')
顺带一提 P18 这一讲当中大概是 20 几分钟左右讲到的配置去做某事的思路对我启发蛮大。并且有助于理解 Django 的中间件。
装饰器可以有多个,下面的会和被装饰的函数当成 inner 加入到上层的装饰器当中去。
endpoint
的意义目前理解为 id
。
functools.wraps()
来帮助我们设置函数的元信息import functools
def wapper(func):
@functools.wapper(func) # 保存元信息
def inner(*args, **kw):
return func(*args, **kw)
return inner
@wapper
def foo():
pass
print(foo.__name__)
'''
如果不设置元信息的话,会导致打印的是 inner
设置之后才可以确定是原先的函数
'''
闪现:类似于暂时存储部分内容的快照,取出来就没了。(阅后即焚)
应用场景:对临时数据的操作,例如错误信息。
请求扩展,指的是在请求之前和响应之前的监听,可以有多个监听,请求之前的监听是顺序执行,响应的是倒序执行。
@app.before_request
def before_request_1(*args, **kw):
print("before_request_1 进来了")
@app.before_request
def before_request_2(*args, **kw):
print("before_request_2 进来了")
@app.after_request
def after_request_1(response):
print("after_request_1 走了")
@app.after_request
def after_request_2(response):
print("after_request_2 走了")
'''
打印顺序为
before_request_1 进来了
before_request_2 进来了
...
after_request_2 走了
after_request_1 走了
'''
如果请求拦截之后,在他之后的请求就不会执行了,但响应的还是会继续执行。
根据状态码定义错误信息
@app.errorhandler(404)
def error_404(args):
return "404页面没找到"
before_first_request
第一个请求
@app.before_first_request
def first(*args, **kw):
## 连接数据库之类的
pass
threading.local()
给每个线程开辟一个内存空间用以对应的线程执行相应操作。达到类似加锁的目的。DBUtils
,但如果使用的是 PooledDB
模式的话,其中有个参数需要注意 maxshared
: 链接池中最多共享的链接数量。0 为全部共享,但这个值设置的时候是由 creator
的 threadsafety
来判别的,也就是说设置后不一定会生效。Title: 第三版
查看一个函数是否是生成器 isgeneratorfunction()
import inspect
inspect.isgeneratorfunction(foo)
获取生成器的当前状态 getgeneratorstate()
GEN_CREATED
等待被第一次执行GEN_RUNNING
正在被执行GEN_SUSPENDED
等待被 next()
调用GEN_CLOSED
结束运行