去 async/await 之路
去 async/await 之路看到彭总写的文章这破 Python,感慨颇多,我也来灌水吧。
首先,我司算是在国内比较敢于尝试新东西的公司吧,最直接的提现就在于我们会及时跟进社区相关基础服务的迭代,并且敢于去尝试新的东西。嗯,从去年6月到现在,我司在线上推行了很长一段时间的 async/await ,并且引入新的注入 Sanic 这样全新的框架,但是不得不说,我们现在要对 async/await 暂时的说再见了。
我们为什么选用 async/await ?和我们组具体场景有关,我们组有相当一部分场景,是根据不同的 URL 去不同的子服务请求数据,组合之后,再进行下一步的统一处理。那么这个时候,传统的同步的方式在数据源越来越杂的情况下就显得很无奈。
我们当时有这样几个选择:
维护进程/线程池,利用通用的进程/线程来处理请求
利用 Gevent 这样第三方的 coroutine+EventLoop 方案
使用 async/await + asyncio 这一套
首先,1被我们排除了,原因很简单,太重了。2最开始也被我们暂时性的排除,当时我们对于 monkey-patch 这样看 ...
她曾以为自己能逃开教授的手丨人间
她曾以为自己能逃开教授的手丨人间
《不能说的夏天》剧照
之前听舍友笑薇被教授性骚扰时,小柯还以为那只是老师对好学生的亲昵行为,安慰她说:“这应该是老师表达欣赏你的一种方式吧。”但几天后她就也被教授性骚扰了。
陈静越来越焦虑。
她又梦见去上课,楼梯里遇到教授张鹏,转身想跑,对方一把手抓住她,恶毒地问:你为什么举报我?你把我逼急了,我也不让你活……
在惊恐中醒来,陈静大汗淋漓。
早在今年“五四”青年节,她们五个女生给中大纪委发去了举报信,指控张鹏从2011年到2017年持续性骚扰女学生和女老师,是田野中名副其实的“叫兽”。
张鹏,中山大学社会学与人类学学院(下称“社人院”)兼生命科学大学院教授,跨学科博士生导师(生态学、社会学方向),兼任国际自然保护联盟(IUCN)物种生存委员会委员,2016年青年长江学者。在网络上搜索他的名字,无论是文艺青年的社交网路,或者是著名的科普网站,他会经常跟“灵长类动物研究”出现在一起。
1陈静的噩梦始于2016年1月底的内伶仃猕猴种群数量田野调查。
田野调查是中大社人院每年组织的特色研究活动。张鹏每年寒假都会带队去不同的岛“蹲点”和“环岛”,以此来 ...
外国语学院-情况说明
情况说明2018年4月23日上午,有微信公众号发布我院岳昕同学的《公开信》。学院第一时间向有关老师和同学了解情况,现作说明如下:
2018年4月22日下午和晚上,学院辅导员出于对学生的关心,通过多种方式、多次联系岳昕同学,均未能联系上,这种情况下,辅导员感到担忧。到23:30左右,该同学还未回到寝室。出于对同学安全的关心,辅导员与同学的母亲联系,询问岳昕同学是否回家等情况。该同学的母亲表示,孩子并未回家;之后,家长拨打电话未接,发微信未回,因此感到着急,随后赶到宿舍。此时,该同学已回到宿舍,母亲与其进行沟通。因担心影响其他同学休息,母亲决定和同学一起回家。
2018年4月23日上午,学院关注到网络上的相关信息后,与家长进一步沟通了情况,表达了关心。学院的老师与家长一样,都真心爱护学生、关心学生,既关心学生的学习,也关心学生的健康、安全与成长,老师和家长是善意的,态度也是一致的。
据了解,该同学已提交了毕业论文的部分初稿,指导老师也非常关心,给予了积极评价和悉心指导,并希望注意写作进度。
学院是学生成长成才的家园,老师们尽一切努力关心爱护学生,而这份关爱也意味着责任所在,学院、老师与家 ...
岳昕:致北大师生与北大外国语学院的一封公开信
岳昕:致北大师生与北大外国语学院的一封公开信北京大学的老师和同学:你们好!我是2014级外国语学院的岳昕,是4月9日早上向北京大学递交《信息公开申请表》的八位到场同学之一。我拖着极疲惫的身躯写下这段文字,说明近来发生在我身上的一些事情。
一4月9日之后,我不断被学院学工老师、领导约谈,并两次持续到凌晨一点甚至两点。在谈话中,学工老师多次提到“能否顺利毕业”、“做这个你母亲和姥姥怎么看”、“学工老师有权不经过你直接联系你的家长”。而我近期正在准备毕业论文,频繁的打扰和后续的心理压力严重影响了我的论文写作。
二4月20日中午,我收到了校方的回复。外国语学院党委书记、学工老师、班主任在场,党委书记向我宣读了学校对于本次信息公开申请的答复:
讨论沈阳师德的会议级别不够记录
公安局调查结果不在学校的管理范围里
沈阳公开检讨的内容因中文系工作失误也没有找到
这样的回复结果令我失望。但毕业论文提交即将截止,我只能先将心思放在论文写作上。
三4月22日晚上十一点左右,辅导员突然给我打来电话,但因为时间已晚,我并没有接到。凌晨一点,辅导员和母亲突然来到我的宿舍,强行将我叫醒,要求我删除手机、电脑中 ...
申请公开信息事件经过(量产基地)
转自公众号:量产基地文章已被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()()
这段代码输出和之前的一样,这里我们将在 a ...
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()
123456789101 ...
日常辣鸡水文:一个关于 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 ,来实现数据彼此隔离的需求。但是现在有个问题来了,现在我们并发模 ...