- 博客(327)
- 资源 (3)
- 收藏
- 关注
原创 uwsgi状态监控
uWSGI 提供了一个内置的状态服务器,你可以通过配置 uWSGI 来启用它,并使用 Web 浏览器或者通过 HTTP 请求来查看 uWSGI 的状态信息。来查看 uWSGI 的状态信息。这个页面会显示各个 worker 进程的状态、请求统计信息、内存使用情况等。执行命令: uwsgitop http://127.0.0.1:9191。还可以在服务器上安装uwsgitop工具,类似top命令实时显示状态。即可在页面上实时显示状态信息,按a键可以切换展示详细程度。
2024-05-24 14:53:26 80
原创 负载压力测试之locust
Locust 是一个用于编写负载测试的开源工具,它使用 Python 进行编写和扩展,并提供了一个简单易用的界面来模拟大量用户同时访问你的应用程序,以评估其性能和稳定性。
2024-05-24 14:41:52 209
原创 Uwsgi Connection reset by peer问题排查
开始也猜到是连接的问题,但由于我们网络环境复杂,客户端到服务端中间经过了防火墙、HA代理,这些服务又归运维组管理,所以第一时间没法看到这些服务日志,一直在调查uwsgi+django。uwsgi在处理耗时较长的请求时,会报上述错误,经过各种排查,确认是由于客户端主动关闭连接,uwsgi在处理完请求想要回写时连接被关闭,进而导致报错。最终在运维的协助下发现是防火墙、HA代理超时时间设置较短导致超时连接被自动关闭。
2024-05-22 11:37:36 110
原创 关于docker network网络
网桥存在一些限制:容器之间的连接不够安全,IP地址也可能会发生冲突等问题。因此,Docker引入了自定义网络的概念,来解决这些问题。总之,Docker的网络设计灵活多样,可以满足绝大部分需求。如果你想禁止某些容器直接互通,你可以将它们分配到不同的自定义网络中。这样,容器与主机之间,以及容器与容器之间就可以相互通信了。因此,即使容器位于不同的自定义网络,它们也可以通过连接到。它们的工作原理也不尽相同。当一个容器连接到自定义的网络时,Docker会在该网络与。首先,我们来看看Docker默认的网络模式,即。
2024-05-10 11:42:52 323
原创 SVN仓库勾子脚本中文乱码问题
添加 env = {"LANG": "en_US.UTF-8"},执行命令时,设置env=env。添加 export LANG=en_US.UTF-8。
2024-04-25 17:52:42 230
原创 Django admin后台添加自定义菜单和功能页面
django admin是根据注册的模型来动态生成菜单,从这个思路出发,如果想添加自定义菜单,那就创建一个空模型并且注册。步骤如下:2、注册到admin.py重写changelist_view函数,使其点击菜单时,展示自定义的页面。在此你可以做orm查询,并且将数据渲染到模板中。而我想实现的是在页面中点击一个按钮来触发请求后端接口,来实现某种行为。reset_svn_auth_file.html:把该文件放在空模型所在app下的templates文件夹。django总路由:
2024-04-20 17:34:36 480 3
原创 redis 哨兵模式
redis 主从复制模式下, 一旦主节点出现故障, 不能提供服务的时候, 就需要人工进行主从切换. 这是十分不靠谱的, 毕竟谁也不知道主节点什么时候出现故障, 这样就无法第一时间恢复服务. 所以 redis 从 2.8 版本开始提供了 哨兵(Redis Sentinel) 模式, 可以通过自动化手段来解决主节点出现故障的问题.进而实现故障转移。
2024-04-07 16:56:54 1104
原创 python解释器多版本设置
将以下内容添加到你的 shell 配置文件(如。3、在pycharm中配置python虚拟环境。2、安装python。
2024-01-19 18:32:12 485
原创 Django信号机制源码分析(观察者模式)
只看倒数第二行:self.receivers.append((lookup_key, receiver)),如果你了解观察者模式就很好理解这行代码的意图:将被装饰的信号处理函数(on_node_approved)注册到self.recervers属性中,也就是观察者模式中讲的主题维护观察者列表行为。逻辑很简单的一个装饰器,核心是调用Signal信号对象的connect方法,也就是上面举例中的node_approved这个对象的connect方法。Django信号的实现原理本质是设计模式中的观察者模式,
2023-12-27 17:25:15 876
转载 如何提高技术领导力?
第一个观点是,当需要担当的时候要能站出来。其实声网是非常讲究扁平化的公司,当然这个扁平化在现在的互联网公司是非常常见的。但我们一直在思考,怎么能够突破管理的瓶颈,能够让更多的人才从管理规则中凸现出来。我们想到的一个点是,我们会淡化职位的概念,会把责任、角色和能力放到一个金字塔里。通过能力的提高,去背一些责任,承担一些角色。在承担这个角色的过程中,可以提高新的能力,承担新的责任和角色。在完成一定专项的任务之后,我们再对应这个角色能力和责任,形成背后创新的技术领导力,而不局限于你的职位、岗位和你所做的事情。
2023-12-22 16:24:58 132
原创 代码阅读次数多于编写次数
这是在这样的假设下进行的:有用且运行良好的软件,对用户有价值的软件,才会对组织也有价值。无论代码编写得多么好,多么易于维护,也无论使用的技术有多复杂,如果不能实现其目标,并为用户提供良好的体验,那就没有意义。单独考虑我们的软件、我们的团队或我们的用户显得是有意义的,但当我们将组织视为一个整体时则不然。“代码的阅读次数多于编写次数”传达的意思是,通过保持代码简单、编写测试和文档等方式来降低维护代码的难度通常是一个不错的投资。由风险投资支持的软件,这类软件没有商业模式,或其商业模式是成长直至垄断然后剥削用户。
2023-12-15 11:13:14 932
原创 到底什么是DevOps
敏捷开发的组织对象是软件开发团队,而软件交付完成还会涉及集成、测试、部署、运维、监控等环节,所以DevOps(2009年诞生)应运而生,DevOps也可以说是敏捷开发的又一次升华。特点是增加协作、减少孤岛、共享责任、提高质量、重视反馈和增加自动化。只有人借助良好的平台、工具,在配合必要的工作流程的指导下,实现任务的快速流转、软件的快速交付。基于以上工具,加上必要的工作流程,来增加部门间紧密协作,实现信息共享,加快任务流转速度,达到软件快速交付、问题及时发现并解决的目的。镜像仓库:Nexus、Harbor。
2023-12-11 10:25:28 547
原创 事件溯源模式
事件溯源(Event Sourcing)是一种设计模式,其核心思想是将系统的状态变化表示为一系列不可变的事件,并将这些事件存储在事件日志中。系统的当前状态可以通过重新应用(回放)这些事件来还原,从而实现状态的追溯。大多数应用程序会使用数据,而典型的方法是用户使用数据时通过立即更新数据使应用程序保持数据的当前状态。例如,在传统的创建、读取、更新和删除 (CRUD) 模型中,典型的数据处理是从存储读取数据、对其作出修改、使用新值更新数据的当前状态。
2023-11-23 11:55:07 177
原创 【k8s-1】基于docker Desktop一键式搭建k8s开发环境
下面介绍如何启动dashboard,dashboard仪表盘是新手学习k8s至关重要的一个工具。3、通过如下 URL 访问 Kubernetes dashboard。在docker desktop中一键启动k8s环境很简单。2、开启 API Server 访问代理。6、登录dashboard。
2023-11-09 11:43:24 661
原创 Gitlab CICD实用技巧汇总
类似编程中的封装和继承,将相同作业或者模板定义在单独文件或项目中,供其他.gitlab-ci.yml使用。include参数可以是当前项目中的文件,也可以是其他项目或者外部项目中的文件。参数通常用于配置外部项目或仓库的触发器,使其能够启动当前项目的CI/CD管道。与cache目的不同,cache主要用于缓存依赖项,例如依赖包、编译中间文件等,以加速连续集成(CI)过程,并且不能下载和共享给其他项目。参数通常用于配置与项目间的协作,例如,一个项目的CI/CD流程依赖于另一个项目生成的artifacts。
2023-10-31 18:33:06 706
原创 Django on_delete参数在sql级别操作中不生效问题
取而代之的是数据库会使用默认的on_delete参数,以mysql为例此参数会被设置为on_delete=no_action,进而才会导致sql删除报错。如上当使用ORM删除aa表中的数据时,与之关联的bb表中的数据也会被删除。也就是说Django不会在数据库层面设置on_delete参数,当然Django官方也在计划支持数据库级别的级联操作。
2023-07-24 17:53:51 669
原创 关于在Python的for循环中改变列表的值问题探究
明白了案例一,这个案例就不难解释了,因为for循环对象的内存地址不变,a[1] = 5表示修改这块内存地址的值。类似地,如果语句体在序列当前项的前面插入一个新项,当前项会在循环的下一轮中再次被处理。在for循环语句中的变量a使用的内存地址为4313456192,这个地址以及存储的值不会因为a的重新赋值而改变,换句话说就是for循环的对象是一块固定的内存地址中的值。还要注意的是id(a),每次打印的是a变量所指的内存地址,对a重新赋值是会改变a所指向的内存地址,也就是通常说的变量a只是内存地址的引用。
2023-07-22 10:56:19 691
原创 在gitlab中生成增量代码质量分析报告
这是一个基于flake8工具生成的代码质量分析报告,每次创建MR,gitlab会检测MR做了哪些更新,并只对本次MR所更新的内容做做质量分析,并生成报告。
2023-07-19 09:37:41 631
原创 Django当DEBUG = False时,信号不触发问题
还需要注意的是,Django 默认将信号处理程序存储为弱引用,所以如果你的处理程序是一个本地函数,它可能会被垃圾回收。为了防止这种情况,当你调用信号的。同一个文件中的信号处理函数名称不能一样,否则靠前的函数会被垃圾回收,除非传入weak=False参数声明为强引用。今天突然发现生产环境中,某些信号没有被正确触发,一番调查总结一下关于django信号执行问题。
2023-07-18 11:49:05 1331
原创 使用django_celery_beat在admin后台配置计划任务
django中使用celery做异步任务和计划任务最头疼的点就是包之间版本兼容性问题,项目一启动花花报错,大概率都是版本问题。每次都会花很大时间在版本兼容性问题上。如果是其他版本的django且有兼容性问题,推荐一个工具。,这玩意可以清晰展示包间依赖关系和版本冲突,很方便。
2023-04-26 16:43:09 1019 2
原创 Python包依赖关系查看
pipdeptree官网pipdeptree是一个命令行工具,用于以依赖树形式显示安装在机器上或虚拟环境中的Python包。pip freeze会将所有依赖项显示为一个扁平列表,需要一些努力才能找出哪些是顶层包以及它们所依赖的包。解决可能已安装的冲突依赖项也很繁琐,因为早期版本的pip没有真正的依赖项解析能力。pipdeptree可以在这方面提供帮助,可以清晰查看包之间的依赖关系,识别在环境中安装的冲突依赖项。
2023-04-26 16:18:20 1542
原创 Click命令行工具包的使用
argument更被推荐用在执行子命令(如上面的python tasks.py dropdb)、参数为文件路径或者URL的情况,否则使用option更合适。多数情况下,我们使用option代替argument,option有更灵活的使用方式,如参数自动提示、值可以从环境变量提取、在--help下自动显示等。option的type参数支持str、int、float、bool、choice、uuid、file、path、datetime等,还可自定义。更详细打包命令可以参考。
2023-04-20 17:06:54 454
原创 django_filters、django_rest_framework_filters源码解析
相信你已经搭建好了django+rest_framework,并且成功启动了你的项目。接下来如果想要使用django_filters或者django_rest_framework_filters过滤器,那么你还需如下配置:......),rest_framework_filters是django_filters的高级扩展,使用了rest_framework_filters就无需在引入django_filters。以上是全局配置方法, 当然也可以在每个viewset中配置独有的过滤器后端。
2023-04-11 17:15:00 1353 2
原创 docker-compose 以交互式方式运行你的容器
最近遇到一个问题,用docker-compose编排的mysql和django服务,在django模型上加了一个没有默认值(就不想在模型上加default=xxx)的非空字段,这时候django会要求你提供一个默认值给这个字段。这时候容器将会启动失败。此时,就可以以交互式方式启动容器,到容器里面执行migrate命令并提供一个默认值。
2023-04-06 11:02:34 967
原创 微信小程序中使用 npm 包
终端切换到小程序根目录,使用npm install安装你需要的npm包。小程序根目录下执行npm init,然后一直回车,会在根目录下生成package.json文件,当然你也可以手动创建package.json文件。使用前修改app.json文件,去掉"style": "v2"(这玩意可能影响一些npm包的正确渲染),在需要使用npm包的页面或者组件中,使用。确保你的小程序开发工具的版本号高于v1.02.1808300,因为这个版本之后的小程序开发工具已经支持使用npm包。语句引入需要的npm包。
2023-03-31 10:43:56 2161 3
原创 nginx路由匹配规则解析
= 精确匹配 (优先级最高)^~ 精确前缀匹配 (优先级仅次于=)~ 区分大小写的正则匹配 (优先级次于^~)~* 不区分大小写的正则匹配 (优先级次于^~)/uri 普通前缀匹配 (优先级次于正则)/ 通用匹配 (优先级最低)
2023-03-17 10:43:20 2913
原创 JS Promise理解
Promise 是异步编程的一种解决方案,其实是一个构造函数,自己身上有all、reject、resolve这几个方法,实例对象上有then、catch等方法。所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作,如ajax请求)的结果。
2022-09-27 11:14:52 4087
原创 ajax异步请求执行顺序问题
上面这段代码本意是想先alert(1),再alert(2),但因为ajax是异步请求,如果请求耗时较长,2会先于1弹出。解决办法1: 将ajax改为同步请求,但会导致页面加载较慢,失去了ajax本身的优势。
2022-09-26 16:05:33 958
原创 siege压力测试工具
V, –version 打印版本信息-h, –help 打印帮助信息-C, –config 显示配置信息-v, –verbose 打印冗余配置信息。-g, –get 显示HTTP交易。-c, –concurrent=NUM 设置并发用户数-u, –url=”URL” 设置被测Web的URL-i, –internet 用户模拟、随机访问URL-b, –benchmark . 基准测试。-t, –time=NUM 设置测试时间。
2022-09-16 17:31:04 288
原创 你真的了解python中的setup.py吗?
通过上面的学习,你一定已经学会了如何打包自己的项目,若你觉得自己开发的模块非常不错,想要share给其他人使用,你可以将其上传到PyPi(PythonPackageIndex)上,它是Python官方维护的第三方包仓库,用于统一存储和管理开发者发布的Python包。安装以源码包方式发布的包的过程,是先解压,再编译,最后才安装(上面提到的pythonsetup.pyinstall),所以它是跨平台的,由于每次安装都要进行编译,相对二进包安装方式来说安装速度较慢。...............
2022-08-01 18:54:26 2207
原创 pkg_resources动态加载插件
当编写应用软件时,我们通常希望程序具有一定的扩展性,额外的功能——甚至所有非核心的功能,都能通过插件实现,具有可插拔性。特别是使用 Python 编写的程序,由于语言本身的动态特性,为我们的插件方案提供了很多种实现方式。django的中间件都用过吧,只需要在setting中配置好django就能自动被调用,这也是利用import_string动态加载的。函数、django的import_string(),它们都可以动态加载指定的 Python 模块。安装的软件包的路径,并且可以正确执行。......
2022-07-25 11:19:57 1619
原创 为什么会选择框架?选择什么样的框架
我想最重要的一点就是高效开发,框架本身提供了相对完善的工具集和项目运行必要模块。其次框架本身已经帮你隐藏大部分的底层实现细节,高度抽象化,提供对人友好的接口调用,能让人更专注在业务层面开发。其次,就是为了高效协作,高效协作的前提就是要标准化、规范化,有统一的编码风格,统一的工具集,收敛技术栈。试想一个多人项目里用了两个db库,三种log库会是什么样的灾难。即便大家都很牛逼,代码写出花又怎样,别人还不是得花时间去理解你的设计思想?理解有偏差甚至可能被人当垃圾,这是大概率事件。技术选型本来就没有绝对的好或不好,
2022-07-01 16:45:39 589
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人