Linux:断点原理与实现

2020-02-29
阅读 5 分钟
7.6k
前言 从事编程工作的我们,总有调试的时刻,不管是通过 IDE 调试开发中的代码,还是通过 GDB 排查正在运行的进程。 特别是经常使用 GDB 的童鞋,对它提供的强大功能更加如数家珍,其中就不乏 breakpoint(断点)。 刚好最近做到 Ptrace 相关的实验,也顺便撸了这篇小文来分享下 断点 当中的道理。 简单 GDB 示范 {代码.....

Python:谨防 Post 打爆 /tmp

2020-02-08
阅读 12 分钟
3.7k
前言 我们有个独立部署的文件传输服务,主要是通过 Flask 实现,对外提供的功能主要是接收客户端传输的文件,并将其转发至 RabbitMQ。 有次收到了磁盘告警: 本来这种告警没什么好特殊的,登录机器删除下文件就好了,然而这次似乎不是那么简单,因为这个增长有点神奇... 正常来说,磁盘空间的增长是一个斜斜的曲线,慢慢...

Python:requests 超时机制实现

2020-01-30
阅读 9 分钟
7.5k
前言 在工作环境中,访问 Http 是再常见不过了,相应的库也非常多,而 Requests 是当中比较好用的一个。 除了常见的 GET、 POST、Delete、PUT 之外,timeout 的参数也是非常好用,它可以防止请求堵塞太长时间,如: {代码...} 既然这个参数这么好用,难免想知道实现的原理,于是就有这次探索! requests 调用关系图(简...

Python:记录一次Web接口优化

2019-11-09
阅读 6 分钟
6.4k
背景 我们负责的一个业务平台,有次在发现设置页面的加载特别特别地慢,简直就是令人发指 让用户等待 36s 肯定是不可能的,于是我们就要开启优化之旅了。 投石问路 既然是网站的响应问题,可以通过 Chrome 这个强大的工具帮助我们快速找到优化方向。 通过 Chrome 的 Network 除了可以看到接口请求耗时之外,还能看到一个...

游记:云南之旅

2019-09-29
阅读 6 分钟
2k
前言 上周公司旅游去了云南,整个感受就像 《彩云之南》 歌词一样: {代码...} Day 1:大理古城 虽然我们飞机是直接去丽江的,但是真正的旅途是从坐了三小时车的大理开始。 在路上一边听着导游介绍一边在车窗外就看到一排排白色的房子呼啸而过,这些白色的房子其实就是大理建筑的主色调了。 在云南有很多少数民族,其中...

Python:线程为什么搞个setDaemon

2019-07-12
阅读 6 分钟
18.9k
前言 使用 Python 都不会错过线程这个知识,但是每次谈到线程,大家都下意识说 GIL 全局锁, 但其实除了这个老生常谈的话题,还有很多有价值的东西可以探索的,譬如:setDaemon()。 线程的使用 与 存在的问题 我们会写这样的代码来启动多线程: {代码...} 输出: {代码...} 通过 Threading 我们可以很简单的实现并发的需...

游记:泰国之旅

2019-05-13
阅读 5 分钟
2.9k
前言 老早就听说泰国游性价比很高,好不容易攒了几天年假,趁着这次五一也终于亲身体验了一把。 因为讨厌跟团,所以和同事们组了个 6 人团就出发了,本来只想是简单的玩玩就算,旅游后才发现这特么简直就是奢侈豪华团鸭! Day 1:曼谷 4.30 号凌晨的飞机,直接从广州飞去曼谷廊曼,到达都已经是是 3点多了,坐上旅行社安...

Python:线程之定位与销毁

2019-02-16
阅读 8 分钟
8.7k
我们有个了不起的后台程序,可以动态加载模块,并以线程方式运行,通过这种形式实现插件的功能。而模块更新时候,后台程序自身不会退出,只会将模块对应的线程关闭、更新代码再启动,6 得不行。

Linux:system 调用引发的 getcwd 异常

2018-12-22
阅读 3 分钟
3.4k
我们有个功能是这样的:有个以 root 运行的 python 程序,它需要以 test 用户执行 linux 命令,所以就通过 subprocess 库 + sudo 来执行,也就是下面的关系图:

Python: 浅析列表的变长变短

2018-12-02
阅读 6 分钟
9.4k
Python 的列表(list)是一个非常灵活的数组,可以随意调整长度。正是因为这种便利,使得我们会情不自禁地去修改数组以满足我们的需求,其中相比于insert, pop 等等而言, append 用法更常见。

Python: kafka-python版本差异导致的问题

2018-10-12
阅读 3 分钟
4.9k
只要用过 docker 的童鞋,都会对 docker logs 很熟悉,这次问题就是,因为 docker 的日志狂刷,按照默认的配置,日志会全部写入 json.log,大约一小时就能刷出 2G 的日志;

Python: 浅谈函数局部变量"快"在哪

2018-09-01
阅读 9 分钟
4.9k
方案很简单,就是先定义局部变量 project_code_to_name,操作完,再赋值到self.project_code_to_name。

Python: C扩展初体验

2018-07-22
阅读 5 分钟
3.9k
使用 Python 毋庸置疑减少了很多规则约束和开发成本,让我们能够更加专注于逻辑而非语法。但是得此失彼,开发效率提高了,却带来了运行性能的问题,所以就常常被其他门派追着暴打。 身为一个 pythoner,我们也很忧伤呀,怪我们咯..

Linux: 关于 SIGCHLD 的更多细节

2018-05-28
阅读 4 分钟
18.2k
一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用 wait 或 waitpid 获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵尸进程

Linux: Nginx proxy_pass域名解析引发的故障

2018-05-20
阅读 5 分钟
14.4k
背景 业务架构: 部署细节:  两容器均部署在同一机器上,通过 docker-compose 编排,并且通过link方式链接。 故障描述 在有次更新代码时,发现前端能够打开,但是所有接口请求全是502(Bad GateWay) 故障排查 查看前端容器compose_ui_1的日志,刷了一大波502(Bad GateWay) UI没问题的话,第一反映就是 compose_api_1 ...

Python: 安装lz4-0.10.1痛苦经历

2018-05-18
阅读 24 分钟
10k
因为项目的需求,要 lz4.0.10.1 的,因为本机已经有一个 1.1.0 版本的,所以必须先卸掉,然后我差点没疯了(手动微笑) {代码...} 准备愉快地装上 0.10.1 {代码...} {代码...} 咦,需要装这个包setuptools-scm,直接无脑装 {代码...} {代码...} 继续装我的 lz4 {代码...} {代码...} 我天。。隐约察觉到有点不对劲,这什...

Python: Windows下用multiprocessing的深坑

2018-03-12
阅读 2 分钟
18.4k
今天在测试多进程时, 发现了一个问题 测试代码: {代码...} 上述代码不复杂, 肉眼就能猜出八九分: 父进程来执行了首尾的两个print, 而子进程则只执行run_proc , 下面就这针对这一个猜测来验证: 在LInux下, {代码...} 很符合我们的预期, 因为两次os.getpid()得到了一样的结果, 而子进程的那句输出也从侧面验证了另外两句pr...

LINUX: 在不重启各自socket程序情况下, 断开ESTAB的TCP链接

2018-02-24
阅读 9 分钟
15.6k
一说起TCP, 就是什么三次握手, 四次挥手. 而这次想讨论的是: {代码...} 情景模拟 简单点, 在同一个机器 通过 nc 来实现 server 和 client 吧 {代码...} {代码...} 上面的意思就是, server端在5555端口监听, 而client 通过 6666 端口去连接 为了更加清晰的看到流量, 咱们通过 tcpdump 来观察: {代码...} {代码...} 而 ss...

Python locals() 的陷阱

2018-01-06
阅读 6 分钟
13.1k
在工作中, 有时候会遇到一种情况: 动态地进行变量赋值, 不管是局部变量还是全局变量, 在我们绞尽脑汁的时候, Python已经为我们解决了这个问题.

Python: 浅析 return 和 finally 共同挖的坑

2017-08-17
阅读 8 分钟
9.3k
老司机肯定一眼就能看出结果, 但是对于尚在入门或者对return不很了解的童鞋, 可能就会懵逼了~ 后面的两句代码是否会被执行? 答案是: 不会执行

Linux:终端提示符 (prompt) 不如期生效原因

2017-07-24
阅读 3 分钟
5.8k
先来简单介绍下, prompt是什么鬼? 顾名思义就是提示符的意思, 看起来和我们遥远, 但实际上只要是每个接触shell的童鞋, 都有看到, 那就是我们在输命令时前面的那串提示符.

Pycharm: 代码跳转如何回退 (小技巧)

2017-07-16
阅读 1 分钟
31.3k
玩Python已经有段时间了, 一般都是通过vim和Pycharm来开发, 真心觉得这两个是神器. Vim神器暂且不说, 今天来分享Pycharm的一个小技巧.

H5: 表单验证失败的提示语

2017-07-13
阅读 2 分钟
9.6k
    前端的童鞋在写页面时, 都不可避免的总会踩到表单验证这个坑. 这时候, 我们就要跪了, 因为要写一堆js来检查. 但是自从H5出现后, 很多常见的表达验证, 它都已经帮我们实现了, 让我们减轻了很多负担, 就好像下面的:

Python: 受限制的 "函数调用"

2017-06-21
阅读 6 分钟
5.6k
函数功能简单明了, 对于结果, 大家应该也不会有太大的异议:func分别是取得全局命名空间中a的值和使用内置命名空间中的函数id获取了a的地址. 熟悉Python的童鞋, 对于LEGB肯定也是不陌生的,也正是因为LEGB才让函数func输出正确的结果. 但是这个只是一个常规例子, 只是用来抛砖引玉而已. 我们真正想要讨论的是下面的例子:

Python源码理解: '+=' 和 'xx = xx + xx'的区别

2017-06-13
阅读 8 分钟
6.3k
前菜 在我们使用Python的过程, 很多时候会用到+运算, 例如: {代码...} 不光在加法中使用, 在字符串的拼接也同样发挥这重要的作用, 例如: {代码...} 同样的, 在列表中也能使用, 例如: {代码...} 为什么上面不同的对象执行同一个+会有不同的效果呢? 这就涉及到+的重载, 然而这不是本文要讨论的重点, 上面的只是前菜而已~~~...

Python: 链式赋值的坑

2017-05-08
阅读 3 分钟
11.7k
在我们使用Python的过程中, 经常遇到赋值语句, 就像下面的那样: {代码...} 可能你会觉得我又要说什么变量赋值就是引用, 这么简单的知识就不讨论啦, 相信聪明的大家肯定都知道的, 我想讲的是链式赋值 先科普下什么是链式赋值: {代码...} 例如: {代码...} 好了, 现在正式进入正题: {代码...} i 和 s 的值分别是什么? 可能...

PhantomJS: 一次程序运行无反应的排查过程

2017-04-24
阅读 11 分钟
11.4k
最近刚接触PhantomJS, 听说这工具是一个基于WebKit的服务器端JavaScript API,可以实现绝大部分浏览器的操作, 迫不及待就想练练手.于是就简单写了一个程序, 简单介绍下:

Python: 函数与方法的区别 以及 Bound Method 和 Unbound Method

2017-04-22
阅读 7 分钟
28.2k
随着我们越来越频繁使用Python, 我们难免会接触到类, 接触到类属性和方法.但是很多新手包括我, 不知道方法 和 函数 的区别,这次简单来讨论下, 如果有哪里认识不正确, 希望大神提点指教!先来看两个定义吧:

C: #ifdef的简单条件编译

2017-04-12
阅读 2 分钟
5.6k
今天在看源码时, 发现一个很神奇的用法, 可能有大神在以前早已知晓甚至经常使用, 不过对于菜鸟的我来说, 还是像发现新大陆那样 , 究竟是什么语法呢? 我们一步步来看看吧:

Python: mutilprocessing Processing 父子进程共享文件对象问题

2017-04-10
阅读 5 分钟
3.7k
multiprocessing python多进程模块, 于是, Processing也是多进程的宠儿. 但今天讨论的问题, 似乎也能引起我们一番重视