1743
备注:
|
2598
|
删除的内容标记成这样。 | 加入的内容标记成这样。 |
行号 34: | 行号 34: |
Stackless Python只提供了一个最基本的框架,它没有附带任何支撑功能,只是满足构建一个特定用途的框架时可能出现的一般需求。 |
|
行号 35: | 行号 37: |
如果调用的操作会阻塞Python解释器,用户需要注意,这个操作也会阻塞所有运行中的小任务。Python解释器会一直阻塞,调度器也会阻塞在执行操作的小任务上,直到那个小任务结束。阻塞解释器的操作常常是和同步IO(文件读写、套接字操作、进程间通讯等)有关的,也要注意time.sleep()。建议用户使用异步版本的IO函数。 某些第三方模块可以用Stackless兼容的方式来代替一些标准库中模块。这种方法的好处是,原来使用标准模块的其他模块也可以在替代的模块上工作。Stackless socket模块是最常使用的替代模块。 |
英文原版: http://www.disinterest.org/resource/stackless/2.6.4-docs-html/stackless-python.html
Stackless Python
Stackless Python 是Python语言的一个增强版本。它让程序员可以获得基于线程的程序的优点,同时又避免传统线程带来的性能和复杂度问题。Stackless Python为Python语言添加的微线程(microthread)是一种方便、廉价、轻量级的工具,如果使用得当,它不仅可以提供一种构建应用程序或者框架的方法,而且能改进程序的结构和可读性。
如果你在你安装的Python附带的文档中读到这篇文章,这说明你安装的已经是Stackless Python而非标准的Python。
1. 概述
除了Stackless Python新增的功能部分,Stackless Python的其他部分的行为和标准的Python完全一样,用法也完全一样。Stackless的新增的功能,是通过stackless模块暴露出来的框架来使用的。
- stackless — 内置的扩展模块
- 小任务(Tasklet) — 轻量级的线程
- 小任务、main、current等
- tasklet类
- 通道(Channel) — 小任务之间的通讯
- 通道与线程
- channel类
- 调度器 — 小任务如何运行
- 合作式调度(Cooperative scheduling)
- 抢占式调度(Pre-emptive scheduling)
- 异常
- 调试与跟踪 — Stackless有什么不同
- settrace与小任务
- 线程 — 线程与Stackless
- 每线程一个调度器
- 通道是线程安全的
- Pickling — 运行中的小任务的序列化
- 函数
- 属性
- 异常
- 小任务(Tasklet) — 轻量级的线程
2. 你需要知道的
Stackless Python只提供了一个最基本的框架,它没有附带任何支撑功能,只是满足构建一个特定用途的框架时可能出现的一般需求。
2.1. 阻塞的操作
如果调用的操作会阻塞Python解释器,用户需要注意,这个操作也会阻塞所有运行中的小任务。Python解释器会一直阻塞,调度器也会阻塞在执行操作的小任务上,直到那个小任务结束。阻塞解释器的操作常常是和同步IO(文件读写、套接字操作、进程间通讯等)有关的,也要注意time.sleep()。建议用户使用异步版本的IO函数。
某些第三方模块可以用Stackless兼容的方式来代替一些标准库中模块。这种方法的好处是,原来使用标准模块的其他模块也可以在替代的模块上工作。Stackless socket模块是最常使用的替代模块。
2.2. 异常
2.3. 调试
3. 外部资源