1. 阿里云 PAI-EAS 试用报告

    阿里云 PAI-EAS 试用报告 阿里云提供了PAI-EAS模型推理部署方案。官方介绍: 在线推理是将算法模型应用至实际业务的重要环节。为了帮助用户更好的实现一站式端到端的算法应用,PAI平台针对在线推理场景提供了PAI EAS(Elastic Algorithm Service)在线预测服务,支持基于异构硬件(CPU/GPU)的模型加载和数据请求的实时响应。您可以通过多种部署方式将您的模型发布成为在线的restful API接口,同时我们提供的弹性扩缩、蓝绿部署等特性可以支撑您以最低的资源成本获取高并发、稳定的在线算法模型服务。 作为模型部署的候选方案, 我写了一个简单的试用报告,并提供一个公网调用的示例, 方便其他人上手。 准备工作 开通 DataWorks 开通 PAI-EAS 开通 api 网关服务(如果要公网调用,必须开通此服务) 部署示例 实现目标: client(python) -> 公网(API-GateWay) -> PAI-EAS(tensorflow) 。 完整代码见aliyun-PAI-EAS。 步骤: Step1 训练模型并导出 SavedModel格式 git clone https://github.com/frkhit/aliyun-PAI-EAS cd aliyun-PAI-EAS # install env python -m pip install -r requirements.txt # train python train.py train # export demo_simple python train.py simple # export demo_complex python train.py complex Step2 PAI-EAS 部署模型 将 demo_simple.zip 及 demo_complex.zip 分别上传到 PAI-EAS, 并命名为 demo_simple, demo_complex。 模型运行情况如下: 在打开模型的 调用信息, 在公网调用地址中,绑定公网。 Step3 本地调用 PAE-EAS 推理服务 分别获取两个模型的公网访问地址及授权码, 复制到demo.py中。 远程调用 PAI-EAS: python call_pai_eas.py。

    2019/11/23 技术

  2. gpt2中文预训练模型试用

    gpt2中文预训练模型试用 最近发现有作者公开了gpt2 的中文预训练模型,代码见imcaspar/gpt2-ml。 作者还公开了Google Colab. 该 gpt2 模型大小5.2GB, 我下载后上传到百度云, 提取码y4k6, 方便其他用户下载。 以下展示一些 gpt2 模型生成结果, 测试环境为Colab. 我有一个朋友 Sample 1 我有一个朋友。读大一的时候,送我一个某二线城市的汉堡王,说是工厂原料,送货上门。我感觉这个城市现在变得没有这个城市味了,不像想象中那么文艺,这价格确实尴尬,吃了几次。一个礼拜。他又送我吃食,从六百涨到了八百。我表示惊诧,与这种送东西的方式不一样。他说并没有办法证明,就此完全封闭式的样样在那卖。反而是拆开来各种味道之后,有几样熟悉的口味,剩下的吃了,前前后后需要我出单八千多。我欣喜若狂。然后我发现这个汉堡王只送人,没有客户,也没有业务员。他很可怜。然后我一直和这个朋友说,别想着赚钱,没什么特别的。我倒不赞同。等到我自己经营能力发展到一定层次的时候,想去做点成功的事情也应该有目标,别想着有什么高端的东西。曾经听过一个同事,大大咧咧,朋友就是这个领域。毕业后,进入某天猫某德国某食品公司做了点电商的销售。好像是他,一个业务员,就在他在该公司的办公室旁边,每天早上六点十分就起床,然后磨蹭上班。原因是,太忙,没时间陪朋友吃中午饭,每天都没什么人吃饭。后来朋友说,他姐就给他换了个客户。他本想做着玩玩,结果一下就被忽悠着进入这个业务,亲戚家也是陌生人,一年无数次电话,连老婆孩子都怕了。我一直想说一句,多学习,少见人,即使你是没有人脉资源,多学习,天下没有免费的午餐。你看,多有魅力的少妇,忽悠上帝老子,还是中国版的蒋介石。微商在人性这点来说,有它的优势,但是有些东西没办法做,很难做,很难抓住,很难产生影响。我见过的微商,更多的是给人换东西的。他们不是你已经经营的产品,而是用平台换东西的,包括你说的这些服装,食品。他们成功的微商只要找到你,说你这个产品在微商上卖的很好,很受欢迎,利润高,选择这个产品,不换也不会换。那时候我问他,你知道这个行业这么受欢迎?可以在微商上面开店吗?他说,好多人已经开始在微商上做了。我问,还有一个赚钱的?他说,对。我很惊讶,微商我什么都做,钱呢?而且你从来没想过自己能成功?他很笃定的回答,他说因为我爸爸一直在用我爸爸的东西。我说,他怎么能知道呢?他说,他的爸爸是军政要员,他有自己的商城,而且自己也在做微商。他向我解释他的商城,虽然是微商,就是卖自己的商品,和朋友没关系,他说他爸爸的商城就叫微商。我听完后默默的放弃了微商这个名称。我最大的感触就是,一个产品的提出和生产,首先是从0开始的,一个产品的开发,以及要用一个跟上时代的引爆者来做,三步协作,两个路子,才叫做成功。他现在是在做阿里系的阿里系。但是在微商上,基 Sample 2 我有一个朋友,高考的时候,一模考了640,二模700,三模640,总分770。三模报了北京十大牛校,也没有上线。但他不服气,觉得复读这个事,不论是划线还是红线,都是不成熟的表现。因为在这之前是三年。去年七月份他考了630,报的五个人的线,第二志愿的被调剂了,380,第三志愿被调剂了,490,第四志愿被调剂了,没有被调剂,总分六百。三模成绩下来之后,他心里没底,过了几天,他突然想在高考的那个暑假里,拼一拼。于是他就考虑了一下,决定开始复读。复读一年,他能上一个三本大学吗?答案当然是否定的。那他能考上清华北大吗?答案是肯定的。那他能去清华北大的北京招生学校吗?答案是肯定的。那他能去北京清华北大的招生学校吗?答案是肯定的。那他能去清华北大的招生学校吗?答案是肯定的。那他能去清华北大的招生学校吗?答案是肯定的。那他能去北京清华北大的招生学校吗?答案是肯定的。你的孩子有多少学习基础有多少知识储备有多少决心一个好的复读班,决定了他的以后的发展方向,基础打好了,,一切都会走好。总的来说,就是一个提升智力、外加运动、多读书多实践的环境,3点一线,我就是这么把孩子培养好的。我是牛小牛,我等你哟~(如果你有好的备考方法,欢迎加我微信:my##ch##ue##yan##g)看下我的日志,或许对你有所帮助哦!今天我就先和大家分享到这了,我在朋友圈每天都会分享一些关于教育、学习方法、记忆训练的文章的,有兴趣的家长可以看看我的其他文章。加微信ji##yi##fa##07(长按复制),我专注于记忆力提升、中小学学习方法的研究,希望能在教育问题上对诸位家长有所帮助!另外,我专注于记忆力提升、中小学学习方法的研究,希望能在教育问题上对诸位家长有所帮助!我是牛小牛,我等你哟!每天一句话:没学好的家长都很没有教养。教育中国已经成为了世界第一教育强国。自从中国开始引入全球化,关注教育的父母都应该知道,目前最令人敬畏的教育行业的确依然是国有及私有,这是规模最大、发展最快的行业。不少的在职业上工作的有经验的人开始转行开设教育机构,他们做的有一个十分醒目的名字:李睿国老师。如果家长在教育圈里,面对孩子上了一次基础不扎实、学习方法上存在了一定问题的学习能力,唯一的办法,就是找一个有教育公司经验丰富的人,把它指导给这个从小就一天天的上好中学的孩子,这比什么都有用。【】拿到名片,就可以销售自己的教育公司了。我是牛小牛,我等你哟!我是牛小牛,我等你哟!(独家公开,拒绝任何分享,拒绝任何不经过我允许私自拆借,不!转!运!) 一闪一闪亮晶晶 Sample 1 一闪一闪亮晶晶的钻石,它属于半人马座中的一个星系的一员,在发现这颗行星上的时候,被命名为as##tro##na##ut##ossp##ect##rum。目前,as##tro##na##ut##ossp##ect##rum已经与太阳系其他的恒星,如白矮星红巨星,共同编织起了一层华丽的天幕。根据科学家的分析,as##tro##na##ut##ossp##ect##rum的质量大约是太阳的三分之一,而周围的星系分布极为广泛,分布了整个银河系。as##tro##na##ut##ossp##ect##rum附近的恒星分布其它行星如果考虑到行星距离光球较远的话,有的行星上并没有适当的伴星,as##tro##na##ut##ossp##ect##rum就在其中一颗恒星上发现了适宜居住的天体,在这颗恒星的旁边,还有几颗太阳系的行星。这些行星的本质特征as##tro##na##ut##ossp##ect##rum周围的恒星的质量都非常大,大约是太阳的四分之一左右,因此,科学家也认为行星的质量有可能大于太阳,因此科学家选择在这颗恒星周围发现适宜居住的行星。as##tro##na##ut##ossp##ect##rum的伴星目前,科学家已经完成了对这些行星的分析,并且还预言,它们的行星距离太阳非常遥远,行星会受到太阳黑子的影响而慢慢地消失。然而,as##tro##na##ut##ossp##ect##rum可以暂时地发现,未来这些行星的质量,不会比太阳大多少。as##tro##na##ut##ossp##ect##rum也发现,人们普遍认为太阳系的卫星是一颗质量大概是太阳的三分之一,距离太阳大约为冥王星距离,整个天球大小的恒星的最大质量。这个质量比冥王星更大的恒星as##tro##na##ut##ossp##ect##rum大小不确定as##tro##na##ut##ossp##ect##rum的发现可能让人们重新考虑、甚至决定是否需要太阳的观测器,nasa太空望远镜的科学家预言,该行星可能已经被预言是个半人马座中的星系,因为无论是时间还是成分,as##tro##na##ut##ossp##ect##rum都是一颗原始而年轻的恒星,已经发现并且预言了它周围的行星。as##tro##na##ut##ossp##ect##rum亮度上升as##tro##na##ut##ossp##ect##rum的光度预计将在2017年达到太阳的四分之一,发现,它可能会突破大小仅有冥王星的四分之一大小,最接近冥王星的行星只有木星,它的光度会在2025年达到冥王星的三分之一大小。如果距离太阳大约六秒之内就能预言完整行星的发现,那么as##tro##na##ut##ossp##ect##rum可能就会被发现,一颗十分小巧的类木行星。任何的行星和发现都是有必要的,但它们的发现,让我们知道了,究竟有那么多的行星。行星,真的非常的小,根本没有距离太阳那么远,但是你也在太阳系的开始,一颗行星就会随着人类开始近地轨道运转一般的飞行,那么,一颗行星在太阳系,所有的行星围绕太阳运转的轨道周期大约为40天,那么是一个十分微妙的轨道周期,基本上是每十六年会有一个行星的剧烈运动,而目前还没有一颗行星具有这样的剧烈运动,我们的太阳,也不会发出任何一次剧烈的剧烈运动。我们的太阳, Sample 2 一闪一闪亮晶晶知道为什么被这么多人喜欢吗?因为一个人可以过得非常好。湖边的小镇丁香一样,或一片一片的花,微风吹过。春又和有情的百合花,发着点点微弱的光。我的美丽和月色像是正要被污染的葡萄。我的爱情是余辉,还有花香。梦是正在沉寂中萌芽的红草莓。我有那么多的一切,那么多的生活和思念,那么多不舍却无限的寄托。站在彼岸,发现日子怎么慢呢?不论是外在的,还是内在的。梦也是一样。哪里有春,哪里就是金沙水榭,是一次两次错过的春天。我从昨天起就背上行囊,记录下我这么多的时间。4月5日,微信公众平台发出一条这样的信息。心开口让人似乎融化了,仿佛失散的古人群中,找到了他们。在春天和微信微博的互动中,你会发现,整个心都被如雨洗礼。你的生活真的有变化吗?是眼角轻眯细细的流动的眼波,还是拥抱的人群,是吃饭和睡觉的时间,是听到熟悉的情歌,还是更新的微博。你的脚步渐渐从近在咫尺,开始渐渐远离身边,开始走上一条看起来微不足道的终点。一座城市变得有情有意,源于你的变化。很多最初只是好奇的人,今天突然发现,原来,这个世界,与自己无关。你可以非常开心,也可以生出一些负面的念头。或许在春光下,没有什么东西是与你无关的。也可以突然间很快乐,或许刚开始是这样。当漫长的微信公众号变得有趣,有声有色,这个世界本不是理所应当。还有这样一批人,我不想和你们组织这样的聚会。这是每个热爱生活的人共同的说法。有时候,他们承受了太多的不舍,但经过不堪的过程,转眼,却又觉得与他们相比,也不是那么与自己无关。这就是云联惠,一家以云联惠为灵魂的产品。简单,易懂。企业、老百姓、投资人,同样有这个想法。前一段,还受到浙江浙商网络营销策划有限公司总裁季强、马华浙商网络营销策划有限公司创始人小编的青睐。在被问及:未来的一个发展趋势,你认为我们云联惠最看重的3个重点是什么?季强回答:这种想法,深藏于他内心深处,内心深处,他认为:云联惠就是市场的堡垒,它的发展,与我们的理念紧密相连。当然,真正的重点还是业务,这是云联惠的基本定位。在大家看来,不可否认,第三方通过销售和服务已经将企业卖掉了。但在云联惠,不能不承认,第三方通过各种运作,占领了大量的入口资源。云联惠目前已经达到三位数的营业额,涉及金融、酒店、物流、电子商务、教育、医疗、全国航运等多个领域。第三方通过专业的服务、市场拓展和新品开发,涉及了酒店、中央银行、航空、旅游、汽车、家电、汽车零部件、电商、金融等五大 Sample 3 一闪一闪亮晶晶和月亮一样大,一眼望去就像钻石那么大,魅力无穷,惊为天人。二算无遗策,不过比较简单。上帝创造了整个世界,开了一个飞船,名叫亚当,创造了上帝,领便当了。这便当了么?对,没错,领便当了,然后婚礼成功了。好了接下来结婚了,有了大房子和洋房子,把大家给满足了。这tm就是无上的天人合一。最后分手,分得快点。这是第三种,生命最灿烂的时刻。三不要真的想着要成为天使,尽管有天使的力量,但我们还是害怕成为地狱的天使。你明明是宇宙的珠宝,却偏偏要象天使一样,你要像珠宝一样,别给它镀白,你不会有一丝一毫的玷污,你不会有一点一滴的残缺,你在天堂最幸福的时刻。四对,这就是最快速方法,不要担心有的人是失败者,因为失败者已经有一些伟大的成就了。努力的改变自己的形象,你就会有很大的成功。五毛主席的教导:什么是正能量,什么是新时代的百花指,这是我们都要学习的。万一成功了呢?【趣味测试:极度恐怖诡异的图片!一般人是看不出的】这张照片看似普通,其实有很多诡异之处,你看出几处了?看出4处的观察力还不错,看出6处的观察力很厉害,看出8处的就很了不起了,10处以上嘛嘿嘿!请问:这张照片有何恐怖诡异之处?实在猜不出的话,关注微信公众号:image##da(←长按复制),回复照片,可知道测试答案!关注微信号详细步骤:打开微信点击右上角+点击添加朋友点击最下面公众号输入image##da点击关注回复照片。点击关注回复照片。点击关注回复照片。阅读历史文章,回复照片。点击关注回复照片。阅读历史文章,回复照片。阅读历史文章,回复照片。点击关注返回首页阅读点击关注回复照片。阅读历史文章,回复照片。点击关注返回首页阅读点击关注回复照片。点击关注阅读历史文章,回复照片。阅读历史文章,回复照片。阅读历史文章,回复照片。点击关注回复照片。点击关注返回首页阅读点击关注返回首页阅读点击关注回复照片。阅读历史文章,回复照片。阅读历史文章,回复照片。点击关注返回首页阅读点击关注返回首页阅读点击关注返回首页阅读点击关注回复照片。点击关注返 国足1-2不敌叙利亚,里皮宣布辞职 Sample 1 国足1-2不敌叙利亚,里皮宣布辞职对手伊朗与澳大利亚在各自的世界杯出线形势下谁能脱颖而出?/cf##p据国外媒体报道,里皮在恒大球员名单中,无缘可能接手国足的中国男足,伊朗人希望对手留在身边,这对里皮来说绝对是好消息。以下是巴西媒体关于里皮组成银狐的猜测:伊朗人目前执教的国足仅剩1场比赛,这场比赛只要取胜即可晋级2018年俄罗斯世界杯;伊朗媒体则认为,如果最后进入世界杯,这支3年前从秘鲁足球甲级联赛杀出重围的欧洲球队,里皮将正式开启前往中超联赛的征程。里皮是目前世界足坛执教已经7年的金元足球教练,他为国足带来了中超首胜,凭借出色的战术执教能力帮助这支1.5线中甲球队提前实现升级。里皮作为国足主帅,过去一共执教过国安、舜天、国安和上港这4支中超球队,此次与以恒大班底为班底的卡马乔一同到来,一定会给国足带来不小的冲击。英国媒体更倾向于称,里皮将在接下来的两场国足比赛中,与中国足协主席蔡振华和足协主席普拉蒂尼见面,在这个最关键的时刻,中国足协主席是否选择了里皮呢?据悉,这次国足客场迎战卡塔尔队,要想为国足敲响警钟,里皮当然想使用普拉蒂尼为国足过去一阶段的战术体系效力,以确保国足始终保持极高的水平。据了解,普拉蒂尼的队友里皮对于外界所传的谈判细节并不了解,也许普拉蒂尼的中方助手比蒙德·布拉西亚,也许更会在国足冲击世界杯这个关键时刻站出来,来帮助里皮。据说,里皮本人在与卡马乔团队的合作中发挥不错,这也将是国足在2018年世界杯夺冠的关键因素。(夏樊)更多精彩内容,点击进入:恒大淘宝足球论坛国足1-2不敌叙利亚,里皮宣布辞职恒大董事局主席许家印此前接受专访时表示,目前形势下,希望国足能够全力以赴。这也从侧面体现了里皮高度自信和坚定的信念,中国足协希望让里皮在明年1月下课,因为这样一来,恒大足校生源规模将达到6万名,学员总数达到8000人,大有国足下课之后这个场地将再也不能开放的势头。对于里皮来说,他执教国足是一件很了不起的事情,今年3月在澳大利亚的亚洲杯,他带领国足在十二强中以12分之差败于乌兹别克斯坦,成为世界杯史上第一支亚洲二流球队。国足1-2不敌叙利亚,里皮宣布辞职对手伊朗与澳大利亚在各自的世界杯出线形势下谁能脱颖而出?/cf##p伊朗人希望对手留在身边,伊朗媒体则认为,里皮将在接下来的两场国足比赛中,与中国足协主席蔡振华和足协主席普拉蒂尼见面,在这个最关键的时刻,中国足协主席是否选择了里皮呢?记者也在伊朗这样一个美丽的国度,已经见证了伊朗人的 Sample 2 国足1-2不敌叙利亚,里皮宣布辞职,中国足协负责人来到内马尔的家里。里皮在接受采访时首先表达了对与中国足协的深厚感情,也表示了自己一边在管理团队中从事管理工作,一边重返国足工作的决心。里皮在今天马尼拉的国足分组比赛中入选后,里皮不仅祝愿中国足协在12强赛中创造佳绩,同时也表达了同样的感情。在接受采访时中国足协负责人表示:每年球队都要进行换帅,为了接下来的12强赛让路,我们一定会奋力一搏,力争最佳,回报中国球迷的支持。里皮在中国足球职业化初期推广的中国足球,则是一个不同的足球国度,中国队教练对我们的管理工作和工作方法做了不少的改革,我认为很好。里皮来了之后,我们很开心,很满意。按照中国足协的规定,里皮很有可能在下一期国足的15人集训名单中。来自中国足协的消息称,里皮在今年6月份的时候也会来到广州担任国足主帅一职。值得一提的是,本周日里皮在上海与法国名帅德尚召开了一次会议,这次会议上,里皮谈到了自己的执教理念,但是里皮拒绝为执教带队公司担任任何一个角色。最后他谈到自己的言论的中心就是平衡俱乐部利益,保证联赛的健康开展。里皮在执教国足的期间,很多是广州恒大的队员,里皮作为一名世界级的教练,至少是俱乐部的主教练,自然是会尽到自己的责任。里皮的执教理念,曾经一度是大众所关注的焦点,但是之后和恒大的合作,都只限于媒体方面,并未获得过广泛的关注。此番,足协和里皮的广州恒大再次相遇,肯定是考验里皮的执教技术,里皮最后的国足之旅,里皮还是希望得到国足的助力和指导,冲击一下里皮自己的未来。如果里皮能让中国足球重新起航,那么中国足球未来的发展是有序且健康的。(ar##iel)体育新闻责任编辑:王博文(体育解说员)尤文图斯中国俱乐部官方网站上海体育新闻中心动图上海体育新闻中心官方网站上海体育新闻中心官方网站上海体育新闻中心官方网站上海体育新闻中心官方网站上海体育新闻中心官方网站上海体育新闻中心官方网站长按二维码,关注我们上海体育新闻中心官方网站上海体育新闻中心官方网站上海体育新闻中心官方网站上海体育新闻中心官方网站上海体育新闻中心官方网站上海体育新闻中心官方网站长按二维码,关注我们上海体育新闻中心官方网站上海体育新闻中心官方网站上海体育新闻中心官方网站长按二维码,关注我们上海体育新闻中心官方网站上海体育新闻中心官方网站上海体育新闻中心官方网站长按二维码,关注我们上海体育新闻中心官方网站上海体育新闻中心官方网站上海体育新闻中心官方网站长按二维码,关 Sample 3 国足1-2不敌叙利亚,里皮宣布辞职,昨晚,他就此前发生的一系列流言做出回应。国足新帅里皮如今留任国足主帅,里皮称非常满意。《亚足联》月报和法新社消息,中国足协向里皮颁发了聘书,《亚足联》宣布将执教国足,足协主席蔡振华确认了这份聘书。里皮能够和中国足协高层进行商谈,这是一次荣誉,国足将以这样的方式结束本赛季。《亚足联》主编艾堃对《法新社》记者说,在我收到聘书之前,当然是满意的。艾堃说,在此之前,我们的一切准备工作都是按照里皮的要求进行的。据法新社消息,中国足协已经向里皮发去了一份为期3个月的短期合同,里皮将在本周三之前与俱乐部主席蔡振华完成签约。对于里皮短期合同的最终细节,中国足协并没有公布。而目前,世界足坛各大媒体报道,中国足协已经向里皮发出邀请,希望他继续执教。中国足协主席蔡振华昨日表示,祝福里皮先生,祝愿中国男足的小伙子们在接下来的比赛中,有所收获,所向披靡。此前中国男足主帅埃里克森表示,自己与中国足协主席蔡振华等多位权威人士就执教条件达成共识,愿意在短期内与中国足协签约。中国足协向里皮发出的聘书,有效期至2019年1月底,届时,中国足协将对他正式发放。国足中有人表示,对里皮的选人用人一点都不意外,他的执教才能、机会和梦想,加上硬件条件,我相信能够满足我们的要求。对于恒大万达集团的新任主教练,意大利《天空体育》消息称,恒大足校时隔3年之后再次进入国足主帅的行列。据报道,前恒大主帅里皮已在上周末与恒大签约,合同为期3年,年薪为155##0万欧元。有消息称,恒大方面已经与里皮取得联系,就合同细节进行了商谈。相比于恒大上一次执教国足,里皮在恒大时曾将恒大视为他在国家队的第一选择。但《全民星探》最新消息,里皮由于在与恒大签约后不久就辞职,据恒大内部人士透露,他的辞职与恒大无关。不过对于这份短期合同,里皮依然有一些非议。上赛季中超冠军广州恒大主帅斯科拉里以250万欧元的周薪加盟恒大,本赛季中超赛场,恒大以亚冠资格挤掉中超霸主延边升入中超,恒大的战绩非常好,在中超有个冠军。在国足当教练前,里皮曾执教过中国国家队。与此同时,佩兰执教恒大时,也向恒大邀请过里皮。据恒大一位知情人士透露,恒大高层已经向里皮汇报,希望里皮在签约之后能执教恒大。当然,最终签约与否,还要看接下来的比赛,也有消息称,里皮本人一方面认为,恒大最终会选择自己,另一方面他也希望在合同到期之后,能更好地沟通。他说。国足新帅无意当国足主帅,下一个帅或

    2019/11/19 技术

  3. 文本生成资料汇总

    文本生成资料汇总

    2019/11/18 技术

  4. 使用 tracemalloc 分析 python 内存使用情况

    使用 tracemalloc 分析 python 内存使用情况 工作中,遇到 tornado 启动的服务器,启动成功后单进程内存过大的问题。 尝试使用内存分析工具,分析代码中那部分占用的内存过多。 在 python3环境下, python自带的工具tracemalloc,可以分析内存的使用情况。 实例 建立如下的 tornado 服务,期望tracemalloc找到内存占用最大的代码块: import tracemalloc logs = [] tracemalloc.start(25) import tornado.ioloop import tornado.web class BadHandler(tornado.web.RequestHandler): memory_list = [i for i in range(1000000)] def get(self): global logs self.write("<br><br><br><br>".join(logs)) app = tornado.web.Application([ (r'/bad', BadHandler), ]) snapshot = tracemalloc.take_snapshot() top_stats = snapshot.statistics('traceback') logs.append("[ Top Biggest 10 block ]") for stat in top_stats[:10]: _msg = ["%s memory blocks: %.1f KiB" % (stat.count, stat.size / 1024)] for line in stat.traceback.format(): _msg.append(line.strip()) logs.append("<br>".join(_msg)) print("\n\n\n\n".join(logs).replace("<br>", "\n")) if __name__ == '__main__': app.listen(8080) tornado.ioloop.IOLoop.instance().start() 启动服务后, 结果可以通过查看控制台或访问 http://localhost:8080/bad得到。 输出结果如下: [ Top Biggest 10 block ] 999744 memory blocks: 35830.3 KiB File "/Users/rkfeng/code/streamit_demo/demo_memory/server.py", line 11 memory_list = [i for i in range(1000000)] File "/Users/rkfeng/code/streamit_demo/demo_memory/server.py", line 11 memory_list = [i for i in range(1000000)] File "/Users/rkfeng/code/streamit_demo/demo_memory/server.py", line 10 class BadHandler(tornado.web.RequestHandler): 2147 memory blocks: 784.9 KiB File "", line 487 File "", line 779 File "", line 674 File "", line 665 File "", line 955 File "", line 971 File "/Users/rkfeng/code/streamit_demo/demo_memory/server.py", line 7 import tornado.web 3986 memory blocks: 243.9 KiB File "", line 487 File "", line 779 File "", line 674 File "", line 665 File "", line 955 File "", line 971 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/html/__init__.py", line 6 from html.entities import html5 as _html5 File "", line 219 File "", line 678 File "", line 665 File "", line 955 File "", line 971 File "", line 219 File "", line 941 File "", line 971 File "/opt/streamit_demo/lib/python3.6/site-packages/tornado/escape.py", line 31 import html.entities as htmlentitydefs File "", line 219 File "", line 678 File "", line 665 File "", line 955 File "", line 971 File "/opt/streamit_demo/lib/python3.6/site-packages/tornado/log.py", line 36 from tornado.escape import _unicode File "", line 219 File "", line 678 File "", line 665 1758 memory blocks: 232.1 KiB File "", line 219 File "", line 734 File "", line 571 File "", line 658 File "", line 955 File "", line 971 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ast.py", line 27 from _ast import * File "", line 219 File "", line 678 File "", line 665 File "", line 955 File "", line 971 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/inspect.py", line 35 import ast File "", line 219 File "", line 678 File "", line 665 File "", line 955 File "", line 971 File "/opt/streamit_demo/lib/python3.6/site-packages/tornado/util.py", line 30 from inspect import getfullargspec as getargspec File "", line 219 File "", line 678 File "", line 665 File "", line 955 File "", line 971 File "/opt/streamit_demo/lib/python3.6/site-packages/tornado/escape.py", line 27 from tornado.util import PY3, unicode_type, basestring_type 1568 memory blocks: 153.5 KiB File "", line 487 File "", line 779 File "", line 674 File "", line 665 File "", line 955 File "", line 971 File "/opt/streamit_demo/lib/python3.6/site-packages/tornado/util.py", line 30 from inspect import getfullargspec as getargspec File "", line 219 File "", line 678 File "", line 665 File "", line 955 File "", line 971 File "/opt/streamit_demo/lib/python3.6/site-packages/tornado/escape.py", line 27 from tornado.util import PY3, unicode_type, basestring_type File "", line 219 File "", line 678 File "", line 665 File "", line 955 File "", line 971 File "/opt/streamit_demo/lib/python3.6/site-packages/tornado/log.py", line 36 from tornado.escape import _unicode File "", line 219 File "", line 678 File "", line 665 File "", line 955 File "", line 971 File "/opt/streamit_demo/lib/python3.6/site-packages/tornado/concurrent.py", line 38 from tornado.log import app_log 1670 memory blocks: 142.8 KiB File "", line 487 File "", line 779 File "", line 674 File "", line 665 File "", line 955 File "", line 971 File "/opt/streamit_demo/lib/python3.6/site-packages/tornado/util.py", line 48 import typing # noqa File "", line 219 File "", line 678 File "", line 665 File "", line 955 File "", line 971 File "/opt/streamit_demo/lib/python3.6/site-packages/tornado/escape.py", line 27 from tornado.util import PY3, unicode_type, basestring_type File "", line 219 File "", line 678 File "", line 665 File "", line 955 File "", line 971 File "/opt/streamit_demo/lib/python3.6/site-packages/tornado/log.py", line 36 from tornado.escape import _unicode File "", line 219 File "", line 678 File "", line 665 File "", line 955 File "", line 971 File "/opt/streamit_demo/lib/python3.6/site-packages/tornado/concurrent.py", line 38 from tornado.log import app_log 1255 memory blocks: 132.2 KiB File "", line 219 File "", line 922 File "", line 571 File "", line 658 File "", line 955 File "", line 971 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 101 import _ssl # if we can't import it, let the error propagate File "", line 219 File "", line 678 File "", line 665 File "", line 955 File "", line 971 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/asyncio/selector_events.py", line 16 import ssl File "", line 219 File "", line 678 File "", line 665 File "", line 955 File "", line 971 File "", line 219 File "", line 1023 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/asyncio/unix_events.py", line 21 from . import selector_events File "", line 219 File "", line 678 File "", line 665 File "", line 955 1303 memory blocks: 122.3 KiB File "", line 487 File "", line 779 File "", line 674 File "", line 665 File "", line 955 File "", line 971 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 93 import ipaddress File "", line 219 File "", line 678 File "", line 665 File "", line 955 File "", line 971 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/asyncio/selector_events.py", line 16 import ssl File "", line 219 File "", line 678 File "", line 665 File "", line 955 File "", line 971 File "", line 219 File "", line 1023 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/asyncio/unix_events.py", line 21 from . import selector_events File "", line 219 File "", line 678 File "", line 665 File "", line 955 1179 memory blocks: 112.9 KiB File "", line 487 File "", line 779 File "", line 674 File "", line 665 File "", line 955 File "", line 971 File "/opt/streamit_demo/lib/python3.6/site-packages/tornado/ioloop.py", line 41 import logging File "", line 219 File "", line 678 File "", line 665 File "", line 955 File "", line 971 File "/Users/rkfeng/code/streamit_demo/demo_memory/server.py", line 6 import tornado.ioloop 1675 memory blocks: 100.1 KiB File "", line 487 File "", line 779 File "", line 674 File "", line 665 File "", line 955 File "", line 971 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/calendar.py", line 10 import locale as _locale File "", line 219 File "", line 678 File "", line 665 File "", line 955 File "", line 971 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/email/_parseaddr.py", line 16 import time, calendar File "", line 219 File "", line 678 File "", line 665 File "", line 955 File "", line 971 File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/email/utils.py", line 33 from email._parseaddr import quote File "", line 219 File "", line 678 File "", line 665 File "", line 955 File "", line 971 File "/opt/streamit_demo/lib/python3.6/site-packages/tornado/web.py", line 65 import email.utils 通过输出结果可以找到内存占用最大的代码段为: class BadHandler(tornado.web.RequestHandler): memory_list = [i for i in range(1000000)] 进阶 参考官方文档, 常见的应用: 展示分配内存最多的前 n 个 py 文件(Display the 10 files allocating the most memory) 比较两次快照之间的内存差别(Compute differences: Take two snapshots and display the differences) 显示最大内存块回溯的代码(Get the traceback of a memory block)

    2019/10/19 技术

  5. spark 集群试用

    spark 集群使用 利用 docker 可以方便地搭建 spark 集群。 网上相关资源较少, 本文将分享作者的经验。 1. docker 搭建 spark集群 github 项目mvillarrealb/docker-spark-cluster, 提供了一个基于 docker 的 spark 集群搭建方案。 但有两个问题: 仅提供 Dockerfile 文件,国内环境创建 docker 时,速度非常慢 没有提供新手友好的入门实例,尤其是基于 python 的实例 本人在该项目基础上,完善入门实例,并将 docker 镜像发布到 docker hub 上。国内用户适用 docker 加速器,便可以很方便地将该项目运行起来。项目源码见github: frkhit/docker-spark-cluster。 环境搭建教程: 克隆项目: git clone git@github.com:frkhit/docker-spark-cluster.git 进入项目目录,使用前, 请设置 docker 加速器, 具体可以参考Docker Hub 镜像加速器 启动集群: docker-compose down && docker-compose up -d, 如果 docker-compose 没安装,可参考docker-compose 安装方法 访问 http://localhost:8080/ 即可访问 spark 集群。 更详细的教程可以参考 README.md 文件。 2. 向 docker 集群提交 python 代码任务 项目中提供一个 python 任务样例 data/spark-apps/test.py, 具体代码如下: # coding:utf-8 __author__ = 'rk.feng' from pyspark import SparkContext, SparkConf conf = SparkConf().set("spark.worker.cleanup.enabled", False) sc = SparkContext( master="spark://spark-master:7077", appName="WordCount", environment={"PYSPARK_PYTHON": "python3"}, conf=conf ) lines = sc.textFile("/spark/README.md") print("count of text is {}".format(lines.count())) result = lines.flatMap(lambda x: x.split(" ")).countByValue() for key, value in result.items(): print("%s %i" % (key, value)) 该任务用于统计spark 自带的/spark/README.md 文件的各个单词出现的次数。 任务提交的方法为, 在项目根目录下, 执行 ./crimes-app.sh。 访问 http://localhost:8080/ 可以看到执行情况。 3. 示例: 在 master 中收集各个 worker 的执行日志 在 data/spark-apps/collect_log.py 中 写入如下代码: # coding:utf-8 __author__ = 'rk.feng' from pyspark import SparkContext, SparkConf import time def do_some_job(_line): # do some thine time.sleep(2) # create logger log_info = "I Got line: {}!".format(_line) print("Cannot show: {}".format(log_info)) return log_info conf = SparkConf().set("spark.worker.cleanup.enabled", False) sc = SparkContext( master="spark://spark-master:7077", appName="CollectLogTest", environment={"PYSPARK_PYTHON": "python3"}, conf=conf ) line_list = [ "LINE {}".format(i) for i in range(20)] new_pipe_rdd = sc.parallelize(line_list, len(line_list)) result_rdd = new_pipe_rdd.map(lambda v:do_some_job(v)) # do job result_list = result_rdd.collect() # print result print("Result of spark is:\n{}".format("\n".join(result_list))) 执行 ./crimes-app-collect-log.sh 命令, 即可看到 master 中输入各个 worker 返回的日志。

    2019/10/18 技术

  6. openresty使用笔记

    openresty使用笔记 1. 配置 openresty 环境 通过 docker-compose 安装 openresty docker-compose.yml 配置如下: version: '3.7' services: nginx: image: openresty/openresty container_name: nginx restart: always ports: - "80:80" - "443:443" volumes: - "./openresty_setting.conf:/usr/local/openresty/nginx/conf/nginx.conf:ro" - "/var/log:/var/log" environment: TZ: Asia/Shanghai networks: - nginx-web networks: nginx-web: driver: bridge openresty 配置实例, openresty_setting.conf文件如下: # nginx.conf -- docker-openresty # # This file is installed to: # `/usr/local/openresty/nginx/conf/nginx.conf` # and is the file loaded by nginx at startup, # unless the user specifies otherwise. # # It tracks the upstream OpenResty's `nginx.conf`, but removes the `server` # section and adds this directive: # `include /etc/nginx/conf.d/*.conf;` # # The `docker-openresty` file `nginx.vh.default.conf` is copied to # `/etc/nginx/conf.d/default.conf`. It contains the `server section # of the upstream `nginx.conf`. # # See https://github.com/openresty/docker-openresty/blob/master/README.md#nginx-config-files # user root; worker_processes auto; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; # include /etc/nginx/mime.types; include /usr/local/openresty/nginx/conf/mime.types; default_type application/octet-stream; ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; gzip_static on; # gzip_vary on; gzip_proxied any; gzip_comp_level 4; gzip_buffers 16 8k; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; ## # Virtual Host Configs ## ################################## # demo.com ################################## server { listen 443 ssl http2; server_name demo.com; location / { proxy_pass http://django:6000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_send_timeout 600; proxy_connect_timeout 600; proxy_read_timeout 600; } } server { listen 80; server_name demo.com; rewrite ^(.*)$ https://$host$1 permanent; } } 2. 使用 lua 在请求 header 上写入请求到达时的时间戳 http { server { listen 80; location / { rewrite_by_lua ' ngx.req.set_header("RTIME", ngx.req.start_time()*1000) '; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://127.0.0.1:8888; } } }

    2019/10/17 技术

  7. mac下 python 报错 CERTIFICATE_VERIFY_FAILED

    mac下 python 报错 CERTIFICATE_VERIFY_FAILED python 下载时, 报错如下: ERROR: Unable to download webpage: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)> (caused by URLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)'),)) 多方搜索,得到错误原因urllib and “SSL: CERTIFICATE_VERIFY_FAILED” Error 根据 Craig Glennie分析如下: This isn't a solution to your specific problem, but I'm putting it here because this thread is the top Google result for "SSL: CERTIFICATE_VERIFY_FAILED", and it lead me on a wild goose chase. If you have installed Python 3.6 on OSX and are getting the "SSL: CERTIFICATE_VERIFY_FAILED" error when trying to connect to an https:// site, it's probably because Python 3.6 on OSX has no certificates at all, and can't validate any SSL connections. This is a change for 3.6 on OSX, and requires a post-install step, which installs the certifi package of certificates. This is documented in the ReadMe, which you should find at /Applications/Python\ 3.6/ReadMe.rtf The ReadMe will have you run this post-install script, which just installs certifi: /Applications/Python\ 3.6/Install\ Certificates.command Release notes have some more info: https://www.python.org/downloads/release/python-360/ 解决方法: 步骤 1: 重新安装 certifi: pip3 install certifi 步骤 2: 执行 /Applications/Python\ 3.6/Install\ Certificates.command

    2019/10/15 技术

  8. docker-compose 安装方法

    docker-compose 安装方法 本文提供一种简单的docker-compose安装方法。 compose项目提供了一种通过封装 docker 中 compose 容器的方式,执行 compose 命令的方案。 具体步骤是: 下载 compose 项目中releases提供的run.sh文件, 链接为https://github.com/docker/compose/releases/download/1.25.0-rc2/run.sh 赋予执行权限 sudo chmod +x run.sh 移动到系统目录下并改名为 docker-compose: sudo mv run.sh /usr/local/bin/docker-compose 执行 docker-compose命令: docker-compose ps

    2019/10/14 技术

  9. 系统代理

    系统代理 1. mac 系统 1.1 terminal 设置代理 在 ~/.bash_profile 中添加设置 alias proxytest='curl http://pv.sohu.com/cityjson?ie=utf-8' deproxy () { unset https_proxy unset http_proxy echo "clear proxy!" } acproxy (){ _proxy="http://localhost:8118" export https_proxy=$_proxy export http_proxy=$_proxy echo "using proxy: $_proxy!" } 使用示例: # 设置前 proxytest # 设置代理 acproxy proxytest # 取消代理 deproxy proxytest 1.2 全局设置代理 在 ~/.bash_profile 中添加设置 # global proxy acglobalproxy () { sudo networksetup -setwebproxy "Wi-Fi" 127.0.0.1 8118 sudo networksetup -setsecurewebproxy "Wi-Fi" 127.0.0.1 8118 sudo networksetup -setsocksfirewallproxy "Wi-Fi" 127.0.0.1 1080 } deglobalproxy () { sudo networksetup -setwebproxy "Wi-Fi" "" "" sudo networksetup -setwebproxystate "Wi-Fi" off sudo networksetup -setsecurewebproxy "Wi-Fi" "" "" sudo networksetup -setsecurewebproxystate "Wi-Fi" off sudo networksetup -setsocksfirewallproxy "Wi-Fi" "" "" sudo networksetup -setsocksfirewallproxystate "Wi-Fi" off } 使用示例: # 设置前 proxytest # 设置代理 acglobalproxy proxytest # 取消代理 deglobalproxy proxytest

    2019/10/08 技术

  10. mac 下安装 adb

    mac 下安装 adb 1. 借助 airetest 安装 adb 原理, 使用 python 包 airtest自带的 adb, 实现 adb 安装。 步骤如下: 安装Airtest, 具体为 pip install -U airtest 为 adb 增加执行权限, chmod +x {your_python_path}/site-packages/airtest/core/android/static/adb/mac/adb, 如, {your_python_path}为 /opt/py35/lib/python3.5 设置全局配置: 在~/.bash_profile 中, 添加 export PATH=$PATH:/opt/py35/lib/python3.5/site-packages/airtest/core/android/static/adb/mac adb 使用: source ~/.bash_profile && adb devices 注意,刚方法适用于 linux, 区别在于, linux 下的 adb 位于 {your_python_path}/site-packages/airtest/core/android/static/adb/linux目录下 2. brew 安装(推荐) 使用过程中发现, 方法一安装的 adb 版本过低, 推荐使用 brew 安装: ```shell script brew cask install android-platform-tools ```

    2019/10/07 技术