在 视图处理 和异步编程中,管理请求上下文的数据是一个常见的需求。在这篇博客中,我们将探讨如何使用 Python 的 contextvars
模块中的 Context
和 ContextVar
来实现请求上下文的缓存数据。我们将使用FastAPI
通过一个具体的代码示例来演示其用法,并对每个部分进行详细解释。
在 Python 中,方法重载是一个比较常见的需求,尤其当我们需要根据不同类型的参数执行不同的逻辑时。虽然 Python 本身并不支持传统意义上的方法重载,但我们可以通过类型注解、条件判断以及 @overload
装饰器来实现类似的功能。本文将通过一个简单的例子来演示如何处理不同参数类型的重载。
在面向对象编程中,基类通常定义了一般性的行为,而子类则可以对这些行为进行扩展或细化。利用范型(Generic) ,我们可以编写更加灵活、可重用的代码。在这种情况下,子类不仅可以继承基类的方法,还可以对方法的参数类型进行进一步限制或缩小,从而提高代码的安全性和可读性。
在实际项目中,遇到一个问题,fastapi请求的视图函数中,已经将耗时任务通过BackgroundTasks
放到后台任务去执行,但是还是会超时kill当前线程。因此,简单记录一下。
几乎所有的教程都告诉你 int() 是 python 的内置函数,然而当你看到 int 的定义,发现它竟然是类
class int(object):
pass
单例模式(Singleton Pattern) 是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。
简单分析一下python中的垃圾回收机制,主要从三方面阐述:引用计数、标记清除、分代回收。
引用计数
引用计数是什么?
GIL:又叫全局解释器锁,每个线程在执行的过程中都需要先获取GIL,保证同一时刻只有一个线程在运行,目的是解决多线程同时竞争解释器资源而出现的线程安全问题。它并不是python语言的特性,仅仅是由于历史的原因在CPython解释器中难以移除,因为python语言运行环境大部分默认在CPython解释器中。
Python的实现版本有很多,例如Jython底层就是JVM,IronPython的底层是.Net,它们的内存管理千差万别取决于底层的运行时系统。在CPython实现中,堆和栈有各自的职责。
很多函数都有自己的很多方法,其中有些方法的功能类似,但是其复杂度有时却大不相同
本节我们将引入一个新模块 timeit
,其功能是来测试一小段 Python
代码的执行速度。