探秘 New Relic Python agent

本文为阅读 NewRelic Python agent 源代码时的思考,主要讨论如何在不修改用户代码的前提下在 Python 中实现模块级别的 hook。使用到的代码版本为 4.20.1.121 newrelic-admin 调用的是位于 newrelic/admin/__init__.py 中的 main 函数,不过在这之前有两个 module 中执行的函数 »

环境变量那些事

本文所使用代码为 CPython 3.7.4,commit sha 为 e09359112e250268eca209355abeb17abf822486 About Environ Variable 每个程序都接收到一张 环境表。其是一个字符指针数组,其中每个指针包含一个以 NULL 结束的 C 字符串的地址。全局变量 environ 则包含了该这指针数组的地址。按照惯例环境变量由 name=value »

Python 3.8 中的 asyncio REPL

IPython 自 7.0 版本开始支持了在 REPL 中直接 await(参考 Asynchronous in REPL: Autoawait),并且对 trio 和 curio 进行支持。可以通过 %autoawait trio 指令切换 IOLoop 然后 Python 3. »

深入理解 Prometheus Python Client

本文使用代码版本为 0.6.0,commit sha 为 d85d12060ed1e3d46201dca0f1da6a9345e2a23d Basic 使用 prometheus_client 来监控 Flask 应用的示例 import time from flask import Flask from flask import g from »

write in Python

本文研究 Python PEP-3116 New I/O 引入后,Python 层面的 write 和 syscall write 之间的关系。文中所使用的 Python 版本为 3.7.2,commit sha 为 9a3ffc0492d1310ead9ce8f5ee678c26b20a338d Binary Mode »

Python 中的 multiprocess.Queue

本文基于 Linux, Python 3.7.2(Commit Sha 9a3ffc0492d1310ead9ce8f5ee678c26b20a338d) Queue 源码 multiprocessing.Queue 内部基于 multiprocessing.Pipe,并且使用 feeder 线程将数据从 Buffer 刷到 PIPE 中 首先来看 Queue 的初始化 »