垃圾回收机制:

Python 的垃圾回收机制以引用计数为主, 标记清除、分代回收为辅。引用计数指:Python 在内部维护了针对每一个对象的引用计数, 当一个对象创建或者被引用时,其引用计数将加 1,当一个对象被销毁或作用域失效时, 其引用计数将减 1。只有对象的引用计数为 0 时,这个对象将会被回收。引用计数的优点:简单、具有实时性。缺点:对象循环引用时将永远不会被销毁。对于对象循环引用的状况 Python 使用标记清除来解决,Python 在内部实现了一个循环检测器, 不停的检测对象是否存在循环引用,如果两个对象互相循环引用并且不包含其他第三者对象时, 其将会被收回。在 Python 参考手册中有写道: 当一个对象无法获取时, 那么这个对象有可能被当成垃圾销毁了。Python 将所有对象分成了三代, 对象存活时间越长就越晚被回收, 反之则越早被回收。 内存管理: Python 使用了内存池机制来管理内存,其内存以金字塔的形式对内存功能进行划分,-1、-2 层主要用于对操作系统进行操作, 0 层中是 C 的 malloc,、free 等等内存分配和释放函数。1、2 层是一个内存池, 当对象小于 265K 时将直接由这片内存池进行分配内存,否则将调用第 0 层中的 C 函数来分配内存,当小于 265K 的对象被销毁时, 其内存也不会被销毁, 只是返回给了内存池以便二次利用。2 层是对 Python 对象进行操作。

Python 的多线程有什么特点?能否充分利用多核?

Python的web框架有哪些?

  • flask
  • django
  • fastapi
  • tornado

Python的web框架都是基于一些已有库构建的,例如flask基于werkzeug。fastapi基于starlette。

Python的多线程无法利用多核,那么web框架是如何应对并发的?

Python的服务器包括uvicorn、gunicorn等,可以执行任意符合WSGI协议的app。
这些服务器都支持workers参数,通过多进程的方式利用多核,通过多线程的方式应对在单核上的并发。