申请公开信息事件经过(量产基地)
转自公众号:量产基地文章已被4044月22日,我采访了岳昕和其他一同申请信息公开的同学,希望了解关于信息公开结果的更多情况。就在采访结束后的凌晨一点,岳昕的母亲与辅导员来到她的宿舍,将她叫醒,要求她删除手机电脑中所有与信息公开事件相关的资料,并要求她书面保证不再介入此事。随后,她被母亲带回家中,无法返校。 12个小时后,岳昕通过公众号“深约一丈”发表了面对北京大学师生及北京大学外国语学院的公开信,表示自己因学校的介入“恐惧而震怒”,并希望学院作出公开说明。 “我不能打一百分” 4月9日上午10点整,十名同学(实际到场八名)向北京大学提交关于1998年7月前后讨论沈阳‘师德’问题的系列会议记录的信息公开申请。4月20日,提交申请的同学们,及其余十五名通过邮件申请信息公开的同学均收到了来自北京大学信息公开办公室的答复。 岳昕是申请信息公开的十名同学之一。4月20日中午11时30分,她和其他同学一样,被邀请前往自己所在院系行政楼的会议室内。学工老师向她出示了校方的答复函,并问:“这个回复可以打一百分吗?” 岳昕回答:“我肯定不能打一百分。” 老师说:“如果我们学校的同学都不能打一百...
怎么样去理解 Python 中的装饰器
怎么样去理解 Python 中的装饰器首先,本垃圾文档工程师又来了。开始日常的水文写作。起因是看到这个问题如何理解Python装饰器?,正好不久前给人讲过这些,本垃圾于是又开始新的一轮辣鸡文章写作行为了。 预备知识首先要理解装饰器,首先要先理解在 Python 中很重要的一个概念就是:“函数是 First Class Member” 。这句话再翻译一下,函数是一种特殊类型的变量,可以和其余变量一样,作为参数传递给函数,也可以作为返回值返回。 12345678def abc(): print("abc")def abc1(func): func()abc1(abc) 这段代码的输出就是我们在函数 abc 中输出的 abc 字符串。过程很简单,我们将函数 abc 作为一个参数传递给 abc1 ,然后,在 abc1 中调用传入的函数 再来看一段代码 1234567def abc1(): def abc(): print("abc") return abcabc1()() 这段代码输出和之前的一样,这里我们...
Sanic 的若干吐槽
Sanic 的若干吐槽刚刚和红姐,在 哪些 Python 库让你相见恨晚? 这个答案下面讨论了一下 Sanic 的优劣。 突然想起,我司算是国内应该比较少见的把 Sanic 用在正式生产线上的公司了,作为一个主力推(da)动(shui)者(bi),我这个辣鸡文档工程师觉得有必要来说一下我们在使用 Sanic 过程中所采用的一系列深坑。 正文首先 Sanic 官方 的口号是一个 Flask Like 的 web framework 。这回让很多人有一种错觉,就是 Sanic 内部的实现和 Flask 近乎一致,但是事实真的是这样么? 我们首先来看一下一组 Hello World 123456789101112# Flaskfrom flask import Flaskapp = Flask(__name__)@app.route('/')def hello_world(): return 'Hello World!'if __name__ == '__main__': app.run() 12345678...
日常辣鸡水文:一个关于 Sanic 的小问题的思考
日常辣鸡水文:一个关于 Sanic 的小问题的思考睡不着,作为一个 API 复制粘贴工程师来日常辣鸡水文一篇 正文最近迁移组内代码到 Sanic ,遇到一个很有意思的情况 首先标准的套路应该是这样的 1234567891011121314151617181920212223242526272829303132333435363738394041from sanic import Sanic,reponseapp=Sanic(__name__)def return_value(controller_fun): """ 返回参数的装饰器 :param controller_fun: 控制层函数 :return: """ async def __decorator(*args, **kwargs): ret_value = { "version": server_current_config.version, ...
日常辣鸡水文:关于 logging 的进程安全问题
日常辣鸡水文:关于 logging 的进程安全问题团队聚餐喝了点酒,作为一个垃圾文档工程师来写一篇日常水文 正文现在团队的日志搜集方式从原本的 TCP 直传 logstash 的方式改进为写入一个单文件后,改用 FileBeat 来作为日志搜集的前端。但是这样时常带来一个问题,即日志丢失 嗯,我们线上服务是 Gunicorn 启用多个 Worker 来处理的。这就有个问题了,我们都知道,logging 模块是 Thread Safe 的,在标准的 Log Handler 内部加了一系列锁来确保线程安全,但是 logging 直写文件是不是进程安全的呢? 分析我们写文件的方式是用的是 logging 模块中自带的 FileHandler ,首先看看它源码吧 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667class FileHandler(StreamHandler): &...
Flask 中的 Context 初探
Flask 中的 Context 初探大家新年好!鉴于今年春晚非常好看,我觉得承受不起,于是来写点辣鸡水文娱乐下大家,这也是之前立的若干 Flag 中的一个 正文做过 Flask 开发的朋友都知道 Flask 中存在着两个概念,一个叫 App Context , 一个叫 Request Context 。 这两个算是 Flask 中很独特的一种机制。 从一个 Flask App 读入配置并启动开始,就进入了 App Context,在其中我们可以访问配置文件、打开资源文件、通过路由规则反向构造 URL。当 WSGI Middleware 调用 Flask App 的时候开始,就进入了 Request Context 。我们可以获取到其中的 HTTP HEADER 等操作,同时也可以进行 SESSION 等操作。 不过作为辣鸡选手而言,经常分不清为什么会存在这两个 Context ,没事,我们慢慢来说一说。 预备知识首先要清楚一点,我们要在同一个进程中隔离不同线程的数据,那么我们会优先选择 threading.local ,来实现数据彼此隔离的需求。但是现在有个问题来了,现在我...
Supervisor 的一个隐藏坑
本垃圾 API 搬运工程师又来了啊,= =今天因为 Supervisor 一个隐藏的参数配置,造成了一个重要项目的线上崩溃。= =我觉得还是有必要分享一波,所以写了一篇垃圾水文。 起因写着写着代码,突然接到一堆报警邮件,让我直接觉得世界不那么可爱 然后定睛一看异常信息?卧槽?新建连接就马上传说中的 [Errno 24] Too many open files ??这搞你xxx啊,开始搞呗。 查 bug首先,众所周知,Linux 中万物皆文件= =,于是我们操作网络链接的过程,其实也就是操作 File Descriptor 的问题= =,诶,既然 Too many open files 那就优先考虑,是不是系统设置的阀值太小了,于是 ulimit -a 一把梭?? 诶?open files 一栏数字不小啊?足够啊?那这特么是什么鬼啊? 行吧,查一下网络连接吧, 一把梭,netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 统计下,当时处于各个状态的连接数量吧 诶?有点意思,TIM...
Python concurrent.future 使用教程及源码初剖
垃圾话很久没写博客了,想了想不能再划水,于是给自己定了一个目标,写点 concurrent.future 的内容,于是这篇文章就是来聊聊 Python 3.2 中新增的 concurrent.future 模块。 正文Python 的异步处理有一个 Python 开发工程师小明,在面试过程中,突然接到这样一个需求:去请求几个网站,拿到他们的数据,小明定睛一想,简单啊,噼里啪啦,他写了如下的代码 1234567891011121314import multiprocessingimport timedef request_url(query_url: str): time.sleep(3) # 请求处理逻辑if __name__ == '__main__': url_list = ["abc.com", "xyz.com"] task_list = [multiprocessing.Process(target=request_url, args=(url,)) for url in url_lis...
你所不知道的 Flask Part1:Route 初探
前言我自己都记不清楚上一次写博客是什么时候了(笑),上一次挖的坑现在还没填完,干脆,开个新坑吧,你不知道的 Flask ,记录下自己用 Flask 过程中一些很好玩的东西,当然很大可能我又会中途弃坑 开篇引子之前遇到一个很奇怪的需求,需要在flask中支持正则表达式比如,@app.route('/api/(.*?)') 这样,在视图函数被调用的时候,能传入 URL 中正则匹配的值。不过 Flask 路由中默认不支持这样的方法,那么我们该怎么办?我们先思考五分钟吧? 好了,我先给出解决方案吧 12345678910from flask import Flaskfrom werkzeug.routing import BaseConverterclass RegexConverter(BaseConverter): def __init__(self, map, *args): self.map = map self.regex = args[0]app = Flask(__name__)app.url_map.converters...
asyncio 笔记
来源 annotated-py-asyncio 阅读补充:1. 基本概念:1.1 协程: “协程 是为非抢占式多任务产生子程序的计算机程序组件,协程允许不同入口点在不同位置暂停或开始执行程序”。 从技术的角度来说,“协程就是你可以暂停执行的函数”。 如果你把它理解成“就像生成器一样”,那么你就想对了。 1.2 事件循环: 事件循环 “是一种等待程序分配事件或消息的编程架构”。 基本上来说事件循环就是,“当A发生时,执行B”。 或许最简单的例子来解释这一概念就是用每个浏览器中都存在的JavaScript事件循环。 当你点击了某个东西(“当A发生时”),这一点击动作会发送给JavaScript的事件循环,并检查是否存在注册过的 onclick 回调来处理这一点击(“执行B”)。 只要有注册过的回调函数就会伴随点击动作的细节信息被执行。 事件循环被认为是一种循环是因为它不停地收集事件并通过循环来发如何应对这些事件。 1.3 Python 的事件循环: 对 Python 来说,用来提供事件循环的 asyncio 被加入标准库中。 asyncio 重点解决网络服务中的问题,事件循环...









