首页 文章 精选 留言 我的

精选列表

搜索[思考控制],共10000篇文章
优秀的个人博客,低调大师

关于python语言优化的一些思考

最近一直在做python工程化相关的工作,颇有心得,遂总结一下。一是为了整理思绪,二是为了解放自己健忘的大脑。 python是一个C的语法糖盒子 原生的python通常都是由cpython实现,而cpython的运行效率,确实让人不敢恭维,比较好的解决方案有cython、numba、pypy等等 cython 是目前我认为发展最好,最靠谱的一项Python加速解决方案。 使用cython编译过后的代码,通常会对原python代码有2倍以上的速度提升。cython的编译也很简单,只需要构建一个setup.py,然后执行: python setup.py build_ext numba numba也是我比较看好的,它的亮点在于使用装饰器的方式应用jit技术,例如下面的代码: @jit def run_xxx(): ... 可直接将run_xxx方法进行高效的c编译。但在大多数应用场景下(尤其是采取了服务拆分或微服务的架构策略),这种功能反而让人有种鸡肋的感觉 只能说numba更适用于模型开发的场景,在模型应用和部署的环节,numba的作用很尴尬 pypy pypy相对比较小众,这是由于它本身的限制条件较多,尤其是对python第三方包的支持上面更是非常局限。由于我在做python开发的过程中,经常需要限制版本,以及引入较多的第三方包,所以pypy就不在考虑的范围内了 不要轻易相信声称自己很快的模块和方法 曾经在网上看到有人发文,声称numpy是目前python下非常高效的一个模块,而numpy的“娘亲们”,甚至把自己夸上了天,说自己如何如何高效。而国内的一些伪专家们,也是盲目的“助纣为虐”,说什么如果你不太懂,请不要轻易去优化numpy云云,难道你自认为优化的算法能胜过numpy里内置的久经考验的算法?真的是误人子弟!很多人在这里就被唬住了,代码分析到numpy的环节,就不敢往下走了。我想说的是,对一切永远保持怀疑的精神才是真正的科学素养,是不是真的高性能,一切要用数据说话。刚开始,我也被短暂的唬住了,毕竟numpy的底层也没接触过,但profiler分析的结果告诉我,问题就出在numpy里,结果发现在我的项目场景里,使用dict能完全替代numpy的所有操作,性能一下提高了很多,而numpy的高效在于ndarray 所以,采取什么数据结构要看应用场景,没有万能的高效数据结构 不要以为排除法是万能的 优化代码的过程中,因为我的以往成功“经验”,也导致走了不少弯路,最主要的,就是盲目使用排除法。使用排除法只能使用二分查找或快排的策略去组织代码,如果目标代码比较少还可以,事实上,在真实场景中往往有成百上千行目标代码。人工执行和实现O(logN)量级的操作,似乎是一种蛮干。 这里有几个度量工具顺便记录下: py_spy https://github.com/benfred/py-spy方便的生成CPU执行方法的火焰图 line_profiler https://github.com/rkern/line_profiler逐行代码分析,不要小看它的能力,它还可以指定要分析的方法和模块 量变真的会引起质变 在很多人的习惯性逻辑思维里,一个程序的性能,随着代码的优化,会是一条平滑的增长曲线。但实践表明,这个逻辑确实有问题。通过不断对代码的优化,我发现,程序的性能到达一定阶段会发生“突变”,或者“阶跃”。上一次优化的执行时间几百毫秒,下一次优化后的执行时间竟然只有几十毫秒,说发生了“阶跃”一点都不夸张。为什么会这样?至少在我的朋友圈里,还没有人能给我令人信服的答案,我自认为比较可靠的理解是,现代操作系统在cpu指令的处理上,对cpu的任务分配还不是那么“流畅”。哪位朋友有好的见解,欢迎批评指正!

优秀的个人博客,低调大师

架构师需要做的分析及思考

理解系统要解决的问题 认识系统特性与要解决的问题间的关系 识别系统的核心行为 整理系统的非功能性需求 确定架构需求 管理需求 规划系统的高层组织 确定架构机制 分析用例场景 演进系统的高层组织并形成组件模型 规划系统的运行时架构和部署模型 规划系统的实现模型 编写核心代码 验证架构设计 整理架构文档 ---------------------------------------------------------------------------------------------------- 注:此文章为原创,欢迎转载,请在文章页面明显位置给出此文链接!若您觉得这篇文章还不错请点击下右下角的推荐,非常感谢!

优秀的个人博客,低调大师

2017视频监控趋势的一些思考

去年开始,安防行业迎来了全新的人工智能时代,根据一年的市场情报收集以及国外论坛的讨论,现将一些值得玩味的信息总结如下: 一、固定摄像头的失宠 如果说大数据的时代到来,摄像头作为城市重要传感器,在及时获取大量的视频图像数据有着先天的优势,但随着移动互联网以及物联网技术的发展,这种前端采集的功能已经开始逐步迁移到更多公共设施或者移动设备(手机、行车记录仪)等身上。 Milestone Systems首席技术官Bjorn Skou Eilertsen认为:“视频在过去两年中创造了全球90%的数据,但是这些数据中,逐年上增的是手机、可携带式设备、无人机等采集的数据,因此我相信在不到五年内,超过50%的视频管理系统中的数据来源,将不会是固定的摄像机。” 如果联系起“速7”中的电影片段,“天眼”与我们现实的视频监控系统的差别之一也正是在于此。深圳云天励飞技术有限公司产品与方案部方案总监陈丹提出:“当前采集设备的覆盖及安装数量与电影仍然有一段距离,影片中所有带有摄像头的设备都可以充当采集端,这在我们现实中是有差异的,这是现在与未来的一段时间内,都没法实现如此多的设备统一调度使用。” 那么未来随着硬件分析能力的加速以及物联网的发展,未来固定摄像头的局限性必然会被打破,虽然这个时间段我们仍然无法准确的判断,但固定摄像头的失宠是必然的趋势。 二、聚合、自动化能力增强 以前我们看摄像头或者可以将其视为一个固定的传感器,是非常常规化的的物品。但随着网络化的发展,全球共有14亿只摄像头正在工作,它们之间有的存在着各种相互融合、贯通的逻辑关系,而这一切便是聚合。 聚合下的系统,便要面对PB级的视频信息,如何实现对如此庞大及复杂的数据操作,仅仅依靠人力是无法的,更加自动化的能力或者称为智能的概念便会被提出,而人工智能更被视为引发视频监控行业质变的关键所在。 通过神经网络算法,摄像头已经可以初步实现人的行为预测,打破了技术的枷锁,视频行业从事后逐步走向事前。 清华大学微电子学研究所副所长王志华教授在接受媒体采访时提出:“但不管是安防还是互联网传递领域,只要你是可知的应用,那你就老老实实的说你在做应用、在做图像解析,而不要吆喝着所谓的‘人工智能’。”如果从严谨的科学态度去给当前的“安防+AI”定位,笔者仍为自动化能力的提升会是一个看上去没有那么火,但却十分吻合的字眼。 三、无所不能的巨无霸时代要结束? 这是一个有趣的话题,可能在这里谈并不太适合,但从技术的角度而言,这确实不会发生。无论是华为还是戴尔也好,这些在ICT行业沉浸多年的“老司机”,他们更多强调的是开放以及合作,在安防业内,也有宇视及科达等在这些字眼上下足功夫。 在技术变革的阶段,尤其是打破了传统行业的壁垒,各种未知的挑战及技术难题,将迫使企业走向合作。Milestone Systems首席技术官Bjorn Skou Eilertsen表示:“在我看来,一家公司尝试和做所有事情的日子已经结束了。我们都需要集体前进,行业自动化以及聚合的趋势会让单打独斗变成寸步难行。” 最后随便举个例子,当前华为安防本着上不做应用,下不碰数据在塑造全新的生态合作,而宇视科技也正在今年提出解决方案赋能工程(UNIview Solution Enabling Engineering),他们不约而同的在做好一件事——设备及解决方案供应商,与人合作,与人分享,重塑行业价值。其他的厂商也有很多,这里不列举了。 或许在这个追逐利益的时代,这些行为看上去很笨拙,但行业需要疯狂的“傻子”,去感染更多的人,才能形成更包容及健康生态环境。 本文转自d1net(转载)

优秀的个人博客,低调大师

部署SDN:拒绝诱惑 认真思考企业需求

软件定义网络(SDN)被视作互联网的秘密武器。尽管SDN面临发展疲软,技术出现问题等状况,不过到目前为止,企业仍对其兴趣满满。 这可能是由于SDN带来的节省成本、提高安全性并实现真正的敏捷的优势。不过话又说回来,这种高复杂性以及惊人的许可成本的SDN真的是企业想要的吗? 虽然部署SDN和SDDC带来的好处足够诱人,但也带来了新的挑战。在真正迈入SDN之前,仍有企业需要解决的一些关键点。 你的企业IT团队关注KTLO,保持灯一直亮的时间是多久?如果IT团队无法解决新的要求,那么自然也没有时间来处理SDN带来的新问题。 也许你会问“SDN不是会让我们更具效率吗?”也许如此,不过需要花费你一些时间。除非你构建一个新的数据中心,否则不要以为这是个快活儿。即使在虚拟化做的非常好的企业里,也总会有历史遗留问题。 战胜旧的虚拟化环境 这引出了另一个关键点:“遗留”问题。如果还有上个世纪的组装机用的胶带,那你就麻烦了。为此你不得不让两个环境平行存在,等待更换主机的时间。现实是,大多数组织需要将两个生态系统融合,并完善长期的架构策略。 当前的虚拟化环境运行状况如何?如果它过时了,那么你仍将面临同样多的问题,甚或比合并物理基础设施问题更多。此外,如果你尚未对使用虚拟化提供自动化和自助服务功能做好准备,那部署SDN很可能不太明智。如果你的企业想要部署SDN,那么最好还是先从升级现有基础架构,以支持网络功能虚拟化和测试自动化功能开始。 你的企业是否具备专职人员来管理和解决SDN基础架构的问题?你需要一些多面手:了解虚拟化的网络人员以及熟悉网络的系统工程师。如果企业中这两个团队不合作,那么SDN部署的成功概率也是非常小的。 评估SDN带来的冲击性 其次,除非企业理解并致力于DevOps的持续集成和部署,否则融合hyper是行不通的。要不,你将如何实现基础设施代码? 推动SDN部署和融合hyper的主要动力在于企业需要一个反映敏捷和灵活的IT。尽管它的确是网络的未来,但并非所有的企业都为此做好了准备。太突然的转变会让企业陷入基本的管理高效基础设施的囹圄。你在背负技术债务吗?你的企业政策、标准和程序是否正常运作?你的员工是否也跟得上技术的脚步了?对于部署SDN或SDDC,首先要做的还是一步步设计,对当前环境进行分析,从而制定一个能够逐渐解决问题的路线图。 最重要的是,拒绝诱惑,拒绝厂商炒作,认真考虑什么对你的企业来说才是最好的。 作者:Michele Chubirka 翻译:张程程 来源:51CTO

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册