【整理】Python之JIT、Django、Greenlet和Stackless

简介:

【JIT】

即时编译(Just-in-time compilation),又称为动态编译,是一种提高程序运行效率的方法。
通常程序有两种编译方式:静态编译与动态编译(直译)。在静态编译中,程序在执行前全部被翻译为机器码,而动态直译则是边运行边翻译。
即时编译器则混合了这二者,一句一句编译源代码,但是会将翻译过的代码缓存起来以降低性能损耗。相对于静态编译代码,即时编译的代码可以处理延迟绑定并增强安全性。即时编译器有两种类型,一是字节码翻译,二是动态编译翻译。

另外,一般来讲编译执行比解释执行要快,但是编译之后又不能跨平台,那我们就到目标平台上去,先编译再执行,这样就比纯解释要快了。这种编译是在“运行”的时候自动进行的,所以叫即时编译(JIT)。

Django

Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC(Model View Controller)的设计模式,M是指数据模型,V是指用户界面,C则是控制器。
它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。

Django的主要目标是使得开发复杂的、数据库驱动的网站变得简单。Django注重组件的重用性和“可插拔性”,敏捷开发和DRY(Don't Repeat Yourself)法则。在Django中Python被普遍使用,甚至包括配置文件和数据模型。

【Greenlet

Greenlet是Stackless的副产品,其将微线程称为 “tasklet” 。tasklet运行在伪并发中,使用channel进行同步数据交换。一个”greenlet”,是一个更加原始的微线程的概念,但是没有调度,或者叫做协程。这在你需要控制你的代码时很有用。你可以自己构造微线程的 调度器;也可以使用”greenlet”实现高级的控制流。例如可以重新创建构造器;不同于Python的构造器,我们的构造器可以嵌套的调用函数,而被嵌套的函数也可以yield一个值。Greenlet是作为一个C扩展模块给未修改的解释器的。

tasklet

一个tasklet对象对应一个Python线程内的微任务。Tasklet的特点就是轻量级和可移植性,并且可以作为系统线程或进程的非常好的替代物。在程序启动的时候,总是存在一个运行的主tasklet。

【Stackless】

Stackless Python是Python程序语言的一个增强版本。其能够使程序员获得基于线程编程的好处,而免受与传统线程模型相伴的性能和复杂度问题的困扰。Stackless为Python引入了微线程的概念(microthread),其占用系统资源少,属于轻量级的东东。如果使用得当,你将获得如下益处:
a) 更好的程序结构 
b) 更据可读性的代码
c) 提高程序员的代码生产力

在您想通过使用Stackless获得便利的时候,只有那么一点点的来自stackless模块的功能性信息需要你注意一下:

Microthreads:  tasklet封装了 允许以microthreads形式被启动的函数。 
Channels:channels可被用于两个tasklet之间的双向通信。 
Scheduling:内置的循环调度器。其可以被用于合作式或者优先级式调度tasklets。 

Serialisation:可以通过pickling方式将tasklets序列化到硬盘以便后期恢复。

【Pickling】

Stackless的主要特性之一就是其可以对tasklet进行pickle和unpickle。这意味着运行于tasklet内部的程序能够被持续不断的存储到文件或者字符串中。之后,其可以基于之前停止的点重新恢复运行,并且该行为不限于同一台机器。

【Scheduler

在Stackless Python之中存在一个简单的内置调度器(scheduler),其按顺序循环遍历调度器list以调度注册其中的tasklet。当一个tasklet被创建后,其自动被添加到调度器list的尾部。然而,调度器需要通过人为的主动调用才能开始工作。最简单的运行调度器的方式是采用stackless模块中提供的方法。该方法会移除主tasklet,然后轮流调度每一个注册的tasklet直到在调度器list为空。


目录
相关文章
|
3月前
|
前端开发 JavaScript UED
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
通过在Django项目中集成Channels和WebSocket,我们能够为前后端分离的应用添加实时通信功能,实现诸如在线聊天、实时数据更新等交互式场景。这不仅增强了应用的功能性,也提升了用户体验。随着实时Web应用的日益普及,掌握Django Channels和WebSocket的集成将为开发者开启新的可能性,推动Web应用的发展迈向更高层次的实时性和交互性。
109 1
|
2月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
208 45
|
2月前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
75 2
|
2月前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
53 1
|
3月前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
56 4
|
3月前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【10月更文挑战第10天】本文比较了Python中三个最受欢迎的Web框架:Django、Flask和Pyramid。Django以功能全面、文档完善著称,适合快速开发;Flask轻量灵活,易于上手;Pyramid介于两者之间,兼顾灵活性和安全性。选择框架时需考虑项目需求和个人偏好。
44 1
|
4月前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
163 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
3月前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【10月更文挑战第6天】本文比较了Python中三个最受欢迎的Web框架:Django、Flask和Pyramid。Django功能全面,适合快速开发;Flask灵活轻量,易于上手;Pyramid介于两者之间,兼顾灵活性和可扩展性。文章分析了各框架的优缺点,帮助开发者根据项目需求和个人偏好做出合适的选择。
60 4
|
4月前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
127 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
3月前
|
存储 Shell 数据库
Python编程--Django入门:用户账户(二)
Python编程--Django入门:用户账户(二)
48 2